Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何使用带有不同对象的`repeating:count:`初始化数组?_Swift - Fatal编程技术网

Swift 如何使用带有不同对象的`repeating:count:`初始化数组?

Swift 如何使用带有不同对象的`repeating:count:`初始化数组?,swift,Swift,令人惊讶的是,下面的代码打印的是相同的,而初始化器每次都应该调用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") } 我只是为了这个做了一个扩展 extensi

令人惊讶的是,下面的代码打印的是相同的,而初始化器每次都应该调用
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")
}

我只是为了这个做了一个扩展

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..<i).map(elementGenerator)
    }
}

class Z {
    var i: Int = 0
}

let z = Array(generating: { _ in Z() }, count: 10)

print(z)
扩展数组{
///创建一个新数组,其值由给定闭包生成。
///-参数:
///-计数:要生成的元素数
///-elementGenerator:生成元素的闭包。
///元素将被放入其中的索引
///插入的对象被传递到闭包中。
公共init(生成元素生成器:(Int)->元素,计数:Int){

self=(0..我为此做了一个扩展

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..<i).map(elementGenerator)
    }
}

class Z {
    var i: Int = 0
}

let z = Array(generating: { _ in Z() }, count: 10)

print(z)
扩展数组{
///创建一个新数组,其值由给定闭包生成。
///-参数:
///-计数:要生成的元素数
///-elementGenerator:生成元素的闭包。
///元素将被放入其中的索引
///插入的对象被传递到闭包中。
公共init(生成元素生成器:(Int)->元素,计数:Int){

self=(0..self.index返回零。您能给我看一下您的测试用例吗?我刚刚用
init(generating elementGenerator):(Int)->Element,count:Int)
修复了错误(称为generating),并用
let z=[z](generating:{inz()},count:10)进行了尝试
.Array是空的。运气不好。
self.indexs
在你的
init
中返回一个空范围。我用Swift 3.1进行了测试。哦,是的,我在玩它,忘了引用那个部分。它现在被修复了。self.indexs返回零。你能给我看一下你的测试用例吗?我刚刚用
init修复了打字错误(称为生成)(正在生成elementGenerator):(Int)->Element,count:Int)
并尝试使用
让z=[z](正在生成:{inz()},count:10)
.Array为空。运气不好。
init中的
self.index
返回一个空范围。我用Swift 3.1进行了测试。哦,是的,我在玩它,忘了引用该部分。它现在已修复。