关于swift的Array repeating 初始化多个对象问题

  • Array repeating的使用
  • Array repeating的替代方案
    • 1. 使用 Range 和 map
    • 2. 使用 Range 和 for (有点智障,没有第一种高级)
    • 3. 使用 AnyIterator (高级玩家)
    • 4. 使用struct 实现Sequence 和IteratorProtocol 代理 (骨灰级玩家)

解决Array repeating初始化只有一个对象

Array repeating的使用

在swift里面系统提供一个一个方法,初始化一个有初始值的指定长度的数组

/// Creates a new array containing the specified number of a single, repeated/// value.////// Here's an example of creating an array initialized with five strings/// containing the letter *Z*.//////     let fiveZs = Array(repeating: "Z", count: 5)///     print(fiveZs)///     // Prints "["Z", "Z", "Z", "Z", "Z"]"////// - Parameters:///   - repeatedValue: The element to repeat.///   - count: The number of times to repeat the value passed in the///     `repeating` parameter. `count` must be zero or greater.@inlinable public init(repeating repeatedValue: Element, count: Int)

swift文档已经给我们一个demo了

  let fiveZs = Array(repeating: "Z", count: 5)print(fiveZs)// Prints "["Z", "Z", "Z", "Z", "Z"]"

有时候我们有个需要,需要初始化多个指定的UIView , 按照官方的

let arr = Array(repeating: UIButton(), count: 5)

我们发现我初始化5个按钮,结果却是5个指向同一个地址的按钮
毫无疑问,你对这个数组进行遍历的时候,可能只有最后一个按钮有作用

Array repeating的替代方案

1. 使用 Range 和 map

     let range = 0 ... 4lazy var buttons = range.map { _ in UIButton() }lazy var lables  = range.map { _ in UILabel() }

2. 使用 Range 和 for (有点智障,没有第一种高级)

      var array = [UIView]()for _ in 0 ..< 5 {array.append(UIView())//array += [UIView()] //also works
}

3. 使用 AnyIterator (高级玩家)

     let anyIterator = AnyIterator(UIView.init)let array = Array(anyIterator.prefix(5))

4. 使用struct 实现Sequence 和IteratorProtocol 代理 (骨灰级玩家)

struct ViewSequence: Sequence, IteratorProtocol {let count: Intprivate var index = 0init(count: Int) {self.count = count}mutating func next() -> UIView? {guard index < count else { return nil }defer { index = index.advanced(by: 1) }return UIView()}}let sequence = ViewSequence(count: 5)
let array = Array(sequence)

解决关于swift的Array repeating 初始化多个对象问题相关推荐

  1. swift_007(Swift的Array 数组)

    1. 在 Swift 中,如果你用let将数组作为常量来定义,他们就是不可变的,如果用 var 定义为变量他们就是可变的. 作为对比,Foundation 框架中的 NSArray 默认是不可变类型, ...

  2. 成功解决AttributeError: module ‘dask.array.numpy_compat‘ has no attribute ‘take_along_axis‘

    成功解决AttributeError: module 'dask.array.numpy_compat' has no attribute 'take_along_axis' 目录 解决问题 解决思路 ...

  3. 成功解决RuntimeError: filter weights array has incorrect shape.

    成功解决RuntimeError: filter weights array has incorrect shape. 目录 解决问题 解决思路 解决方法 解决问题 File "F:\Pro ...

  4. 成功解决TypeError: Cannot cast array data from dtype('float64') to dtype('U32') according to the rule '

    成功解决TypeError: Cannot cast array data from dtype('float64') to dtype('<U32') according to the rul ...

  5. 成功解决ValueError: setting an array element with a sequence.

    成功解决ValueError: setting an array element with a sequence. 目录 解决问题 解决方法 解决问题 ValueError: setting an a ...

  6. 成功解决ValueError: Expected 2D array, got 1D array instead: Reshape your data either using array.reshap

    成功解决ValueError: Expected 2D array, got 1D array instead: Reshape your data either using array.reshap ...

  7. 已解决ValueError: Expected 2D array, got 1D array instead

    已解决ValueError: Expected 2D array, got 1D array instead 文章目录 报错问题 解决方法 PS 报错问题 之前在工作中遇到过这个坑,记录一下问题以及解 ...

  8. 成功解决ValueError: Expected 2D array, got 1D array instead

    成功解决ValueError: Expected 2D array, got 1D array instead 目录 解决问题 解决思路 解决方法 解决问题 ValueError: Expected ...

  9. 初始化列表||类对象作为类成员|| 静态成员

    初始化列表 作用: C++提供了初始化列表语法,用来初始化属性 语法:构造函数():属性1(值1),属性2(值2)... {} #include <iostream> using name ...

最新文章

  1. 首款鸿蒙系统终端n,首款搭载华为鸿蒙系统终端来了!荣耀智慧屏正式发布,3799元起售...
  2. SiamMask:视频跟踪最高精度 (中科院王强大神作品)
  3. Flutter项目实战教程分享、基础使用、性能优化、每日积累
  4. ping 丢包 网络摄像头_利用Zabbix监控工具自动帮我们检测目标网络状况
  5. sysbench压测时遇到max_prepared_stmt_count相关错误
  6. Adobe出现正版验证提示如何解决?Adobe正版校验关闭教程
  7. 学科竞赛管理系统服务器错误,学科竞赛管理系统.docx
  8. 字节学妹的数据分析笔记,收藏
  9. discuz wooyun-2010-080723
  10. java-用for循环打印大写字母(部分简单大写字母)
  11. 原厂对NPI安全稽核要求
  12. python足球数据可视化_欧洲足球,5大联赛!Python爬虫数据可视化带你解析经典赛事...
  13. 【翻译】利用加速度求解位置的算法——三轴传感器
  14. 4G EPS 中的 Bearer
  15. 百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)
  16. Oracle如何获取最近七天的数据
  17. Unity渲染模型顶点色shader教程
  18. lammps数据后处理:python绘制应力应变曲线 附程序代码
  19. VS2015无法使用编辑并继续 及 警告LNK4075的解决方法
  20. 【Python】如何用 python 计算矩阵相乘 - numpy.dot()

热门文章

  1. JAVA基础之String
  2. instanceof用法详解
  3. MUI 的学习与使用
  4. 资源咖啡馆_论文笔记
  5. Galaxy S8能帮三星打好这场翻身仗吗?
  6. 【Linux学习】Linux命令卸载软件
  7. 找不到夺神之权服务器,流放之路3月21日夺神之权停服更新介绍
  8. C# 手动实现UrlEncode(查看微软底层代码整理)
  9. Centos 解压到指定目录 (tar解压命令)
  10. nginx反向代理tcp