如何使用具有不同对象的“重复:计数:”初始化数组? [复制]
Posted
技术标签:
【中文标题】如何使用具有不同对象的“重复:计数:”初始化数组? [复制]【英文标题】:How to initialize an array using `repeating:count:` with distinct objects? [duplicate] 【发布时间】:2016-11-14 01:03:26 【问题描述】:令人惊讶的是,下面的代码打印出SAME
,而初始化程序每次都应该调用Z()
构造函数。如何使用此方法对 Z
的不同实例初始化数组?
import Foundation
class Z
var i: Int = 0
var z: [Z] = [Z](repeating: Z(), count: 10)
if z[0] === z[1]
print("SAME")
else
print("NOT SAME")
【问题讨论】:
【参考方案1】:我为此做了一个扩展!
extension Array
/// Create a new Array whose values are generated by the given closure.
/// - Parameters:
/// - count: The number of elements to generate
/// - elementGenerator: The closure that generates the elements.
/// The index into which the element will be
/// inserted is passed into the closure.
public init(generating elementGenerator: (Int) -> Element, count: Int)
self = (0..<count).map(elementGenerator)
class Z
var i: Int = 0
let z = Array(generating: _ in Z() , count: 10)
print(z)
【讨论】:
self.indices 返回零。 你能告诉我你的测试用例吗? 我刚刚用init(generating elementGenerator): (Int) -> Element, count: Int)
修正了拼写错误(称为生成)并用let z = [Z](generating: _ in Z() , count: 10)
尝试了它。数组为空。
不走运。 self.indices
在您的 init
中返回一个空范围。我用 Swift 3.1 测试过。
哦,是的,我在玩它,忘了提到那部分。现在已经修好了。以上是关于如何使用具有不同对象的“重复:计数:”初始化数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?