【问题标题】:Initilizing an index in an Array初始化数组中的索引
【发布时间】:2019-06-29 13:45:34
【问题描述】:

我正在创建一个具有自动索引的类。我在下面编写了有效的代码,但包含一个我无法解决的非常草率的方法。我在下面设计了一个简单的游乐场演示。我要求这样做是为了改进我的代码和我对 Swift 的了解。

请注意,我正在创建一个名为 tokenParts 的 IndexPairs 数组。索引通过函数“getUniqueIdentifier()”添加到类中。如下所示,它可以工作,但我觉得我没有正确使用它。

我用语句“tokenParts.append(...”添加到数组中。在这个语句中我有“index: 1”,因为 Swift 说我必须有一些东西作为索引。这个赋值被忽略了,但我不能确定如何在 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   

【问题讨论】:

    标签: swift


    【解决方案1】:

    只需将您的初始化函数更改为

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

    这在操场上对我有用

    【讨论】:

    • 谢谢你的工作。但我想知道我现在是否有一个新的“草率编码”问题。我不希望索引真正是可选的。我是否正确地假设因为 init 的编写方式真的不是可选的?
    • 这不是可选的,不。您的 init 函数是创建 IndexPairs 实例的唯一方法,索引属性将始终使用 IndexPairs.getUniqueIdentifier() 设置为最新索引
    • 如果您想确保没有其他代码更改索引属性,您可以始终将 set 设为私有:private(set) var index: Int
    • 再次感谢您。 “私人(设置)”确实可以解决问题。我也增加了知识。
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 2018-09-02
    • 2010-09-10
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多