Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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 初始化数组中的索引_Swift - Fatal编程技术网

Swift 初始化数组中的索引

Swift 初始化数组中的索引,swift,Swift,我正在创建一个具有自动索引的类。我已经编写了下面的代码,可以正常工作,但是包含了一个我无法解决的非常草率的方法。我在下面设计了一个简单的游乐场演示。我这样做是为了提高我的代码和Swift知识 注意,我正在创建一个名为tokenParts的IndexPairs数组。该索引是使用func“getUniqueIdentifier()”添加到类中的。正如下面使用的一样,它可以工作,但我觉得我没有正确地使用它 我用一条语句“tokenParts.append(…”添加到数组中,在这条语句中我有“index

我正在创建一个具有自动索引的类。我已经编写了下面的代码,可以正常工作,但是包含了一个我无法解决的非常草率的方法。我在下面设计了一个简单的游乐场演示。我这样做是为了提高我的代码和Swift知识

注意,我正在创建一个名为tokenParts的IndexPairs数组。该索引是使用func“getUniqueIdentifier()”添加到类中的。正如下面使用的一样,它可以工作,但我觉得我没有正确地使用它

我用一条语句“tokenParts.append(…”添加到数组中,在这条语句中我有“index:1”,因为Swift说我必须在其中为index添加一些内容。此赋值被忽略,但我无法确定如何在append语句中删除此参数

我相信有更好的办法

class IndexPairs
{
   var index: Int
   var token: String
   var label: String

   private static var identifierFactory = -1

   private static func getUniqueIdentifier() -> Int {
    identifierFactory += 1
    return identifierFactory
    }

    init(index: Int, token: String, label: String) {
        self.index = IndexPairs.getUniqueIdentifier()
        self.token = token
        self.label = label
    }
}

 var tokenParts: [IndexPairs] = []

for i in 0...4 {
    tokenParts.append(IndexPairs( index: 1, token : "token"+String(i), label: "label"+String(i))) //index: 1 -- works
}

for i in 0...4 {
    print("\(tokenParts[i].index) \(tokenParts[i].token) \(tokenParts[i].label)")
}
打印循环显示以下内容,因此它正在工作。打印:

0 token0 label0
1 token1 label1
2 token2 label2
3 token3 label3
4 token4 label4   

只需将init函数更改为

init(token: String, label: String) {
    self.index = IndexPairs.getUniqueIdentifier()
    self.token = token
    self.label = label
}

这对我在操场上的工作很有效

谢谢你。但是我想知道我现在是否有了一个新的“草率编码”问题。我不想让索引真正是可选的。我的假设正确吗?因为init的编写方式确实不是可选的?它不是可选的,不。init函数是创建IndexPairs实例的唯一方法,index属性将始终使用IndexPairs.getUniqueIdentifier()设置为最新索引如果您想确保没有其他代码更改index属性,您可以始终使set private:private(set)var index:int再次感谢您。“private(set)”确实起到了作用。我也增加了自己的知识。