Swift中如何将[String: [String:Bool]]类型传入类的init方法?
解决Swift中类初始化方法传入字典类型的问题
你遇到的问题是在初始化方法的参数声明里误用了实例创建语法,而不是正确的类型声明。咱们一步步来修正:
错误原因分析
你原来的写法:
init(initSeats : [String: [String:Bool]]()) { //code }
这里的[String: [String:Bool]]()是在创建一个空的该类型字典实例,但初始化方法的参数需要的是类型标注,不是直接创建实例,这就导致编译器无法解析,报出"Expected ',' separator"的错误。
正确的写法
1. 基础版:要求必须传入指定类型的参数
如果希望调用初始化方法时必须传入一个[String: [String:Bool]]类型的字典,写法如下:
class YourClassName { var seats: [String: [String: Bool]] init(initSeats: [String: [String: Bool]]) { self.seats = initSeats } } // 调用示例 var seats = [String: [String:Bool]]() // 可以在这里给seats添加数据 let manager = YourClassName(initSeats: seats)
2. 进阶版:给参数设置默认空字典
如果你希望初始化时可以选择不传参数,默认使用空字典,可以给参数添加默认值:
class YourClassName { var seats: [String: [String: Bool]] init(initSeats: [String: [String: Bool]] = [:]) { self.seats = initSeats } } // 两种调用方式都可行 let manager1 = YourClassName() // 使用默认空字典 let manager2 = YourClassName(initSeats: seats) // 传入自定义的seats
这样就能正确实现你想要的,把指定类型的字典传入类的初始化方法啦。
内容的提问来源于stack exchange,提问作者Karliene
相关产品推荐
相关产品推荐

