解决关于swift的Array repeating 初始化多个对象问题
关于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 初始化多个对象问题相关推荐
- swift_007(Swift的Array 数组)
1. 在 Swift 中,如果你用let将数组作为常量来定义,他们就是不可变的,如果用 var 定义为变量他们就是可变的. 作为对比,Foundation 框架中的 NSArray 默认是不可变类型, ...
- 成功解决AttributeError: module ‘dask.array.numpy_compat‘ has no attribute ‘take_along_axis‘
成功解决AttributeError: module 'dask.array.numpy_compat' has no attribute 'take_along_axis' 目录 解决问题 解决思路 ...
- 成功解决RuntimeError: filter weights array has incorrect shape.
成功解决RuntimeError: filter weights array has incorrect shape. 目录 解决问题 解决思路 解决方法 解决问题 File "F:\Pro ...
- 成功解决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 ...
- 成功解决ValueError: setting an array element with a sequence.
成功解决ValueError: setting an array element with a sequence. 目录 解决问题 解决方法 解决问题 ValueError: setting an a ...
- 成功解决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 ...
- 已解决ValueError: Expected 2D array, got 1D array instead
已解决ValueError: Expected 2D array, got 1D array instead 文章目录 报错问题 解决方法 PS 报错问题 之前在工作中遇到过这个坑,记录一下问题以及解 ...
- 成功解决ValueError: Expected 2D array, got 1D array instead
成功解决ValueError: Expected 2D array, got 1D array instead 目录 解决问题 解决思路 解决方法 解决问题 ValueError: Expected ...
- 初始化列表||类对象作为类成员|| 静态成员
初始化列表 作用: C++提供了初始化列表语法,用来初始化属性 语法:构造函数():属性1(值1),属性2(值2)... {} #include <iostream> using name ...
最新文章
- 首款鸿蒙系统终端n,首款搭载华为鸿蒙系统终端来了!荣耀智慧屏正式发布,3799元起售...
- SiamMask:视频跟踪最高精度 (中科院王强大神作品)
- Flutter项目实战教程分享、基础使用、性能优化、每日积累
- ping 丢包 网络摄像头_利用Zabbix监控工具自动帮我们检测目标网络状况
- sysbench压测时遇到max_prepared_stmt_count相关错误
- Adobe出现正版验证提示如何解决?Adobe正版校验关闭教程
- 学科竞赛管理系统服务器错误,学科竞赛管理系统.docx
- 字节学妹的数据分析笔记,收藏
- discuz wooyun-2010-080723
- java-用for循环打印大写字母(部分简单大写字母)
- 原厂对NPI安全稽核要求
- python足球数据可视化_欧洲足球,5大联赛!Python爬虫数据可视化带你解析经典赛事...
- 【翻译】利用加速度求解位置的算法——三轴传感器
- 4G EPS 中的 Bearer
- 百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)
- Oracle如何获取最近七天的数据
- Unity渲染模型顶点色shader教程
- lammps数据后处理:python绘制应力应变曲线 附程序代码
- VS2015无法使用编辑并继续 及 警告LNK4075的解决方法
- 【Python】如何用 python 计算矩阵相乘 - numpy.dot()