Swift Dictionaries:不可能让一个数组成为一个键的价值吗?

时间:2014-06-19 02:51:50

标签: arrays dictionary swift

我想声明一些数组并将它们指定为字典中键的值。

以下是代码:

class ViewController: UIViewController {
   let colorsArray = ["Blue", "Red", "Green", "Yellow"]
   let numbersArray = ["One", "Two", "Three", "Four"]

   let myDictionary = ["Colors" : colorsArray, "Numbers" : numbersArray]

   override func viewDidLoad() {
        super.viewDidLoad()
        // etc.

这会产生以下错误:

ViewController.Type does not have a member named 'colorsArray'



所以....

我尝试修改我的词典声明:

let myDictionary:Dictionary<String, Array> = ["Colors" : colorsArray, "Numbers" : numbersArray]

这给了我一个更好的更好的错误:

Reference to generic type 'Array' requires arguments in <...>


我尝试了各种其他修复 - 没有任何作用。

这在Objective-C中是一块蛋糕,但在Swift中......?

解决方案
将字典声明语句移动到viewDidLoad修复它:

class ViewController: UIViewController {
   let colorsArray = ["Blue", "Red", "Green", "Yellow"]
   let numbersArray = ["One", "Two", "Three", "Four"]

   override func viewDidLoad() {
        super.viewDidLoad()
        let myDictionary = ["Colors" : colorsArray, "Numbers" : numbersArray]
        // etc.

我不明白为什么会这样,但现在确实有效。

1 个答案:

答案 0 :(得分:5)

在您的代码中,您没有初始化colorsArraynumbersArraymyDictionary,因为您指定了{{1}时将使用的默认值}没有设置一个。您不允许在属性的默认值中引用其他属性,因为(我推测一下)它们的设置顺序无法保证。

这样简单
init()

以与初始代码相同的方式失败。要根据需要设置class Test { let a = 3 let b = 5 let c = a * b } c,我们必须在初始值设定项中设置,而不是使用默认值:

myDictionary

(请注意,class Test { let a = 3 let b = 5 let c: Int init () { c = a*b } } 内的不可变属性是可变的,这就是我们使用init的方法。)

因此,最接近初始代码的解决方案是:

let c
相关问题