麻烦通过传入字典数组的init()方法实例化对象

时间:2016-07-06 19:53:38

标签: ios swift

我正在使用Swift通过其init()方法创建一个NSObject,传入字符串和一个Dictionaries数组(Dictionaries代表UIButtons,每个都有一个标题,一个链接,每个潜在按钮的模糊 - 可以来自这些按钮的1-3个。)

在ContentItem()的init()方法中,我正在尝试将Dictionaries创建为此对象的属性。

它给了我一个错误:“实例成员'下标'不能在类型上使用”(String:String)“:var tempButton = [String:String] []”。

我做了一些研究,听起来可能是在init()方法中实例化变量 - 因为这是在创建对象之前?

这是对的吗?有人对此有任何见解吗?有没有办法将这些传递给参数传递给类?我被卡住了。感谢。

class ContentItem: NSObject {
     var title: String
     var body: String
     var buttonsArray: Array<Dictionary<String,String>>

     init?(title: String, body: String, buttonsArgs: Array<Dictionary<String, String>>) {
        self.title = title
        self.body = body

        for btn in buttonsArgs {
            var tempButton = [String: String][]     // placeholder for the button we are creating to attach to buttonsArray[]
            for (btnKey, btnValue) in btn {         // iterate through each button's Dictionary element that is passed in to init()
                print("btnKey: \(btnKey), btnValue: \(btnValue)")
                tempButton[btnKey] = btnValue       // assembling the parameters of this button
            }
            self.buttonsArray.append(tempButton)    // assigning the buttons to the object
        }
        super.init()
     }
 }

1 个答案:

答案 0 :(得分:2)

问题1

函数调用始终使用( ),而不是[ ]

var tempButton = [String: String]()

相当于:

var tempButton: Dictionary<String, String> = Dictionary<String, String>.init()

第2期

您正在尝试追加不存在的数组:

var buttonsArray: Array<Dictionary<String,String>>

该行声明名为buttonsArray的变量将存在,类型为Array<Dictionary<String,String>>,但它没有为其定义任何值。改为将其改为:

var buttonsArray: Array<Dictionary<String,String>> = Array<Dictionary<String,String>>()

现在发生了初始化,编译器可以为我们推断出类型:

var buttonsArray = Array<Dictionary<String,String>>()

我们可以使用Array<Dictionary<String,String>>[[String : String]];

的简写
var buttonsArray = [[String : String]]()