我试图像Facebook一样创建个人资料,并且传递的联系人变量和contactInfo变量分别具有userID和电话号码,电子邮件和地址列表。 为了在表格视图的各自部分显示电话号码,电子邮件和地址,我认为最简单的方法是将ContactInfo转换为三个独立的数组:contactInfoPhoneList,contactInfoEmailList,contactInfoAddressList
如果我没有初始化self.contactInfoPhoneList以及super.init上方的其他两个,我会收到错误,但我似乎无法在超级之前调用contactInfoToList函数。 init,否则我会在super.init之前在方法调用中调用self。
但是,如果我尝试在超级初始化之后初始化它们,那么我就是一个"不可变的值' self.contactInfoPhoneList'可能只会初始化一次"错误。
这是如何从init创建另外三个数组的,还是应该以不同的方式完成?任何帮助解决错误的人都将不胜感激!
class ViewController: UIViewController {
let contact: ContactStruct
let contactInfo: [ContactInfo]
let contactInfoPhoneList: [ContactInfo]
let contactInfoEmailList: [ContactInfo]
let contactInfoAddressList: [ContactInfo]
init(contact: ContactStruct, contactInfo: [ContactInfo]) {
self.contact = contact
self.contactInfo = contactInfo
super.init(nibName: nil, bundle: nil)
let contactInfoList = self.contactInfoToList(contactInfoList: contactInfo)
self.contactInfoPhoneList = contactInfoList[0]
self.contactInfoEmailList = contactInfoList[1]
self.contactInfoAddressList = contactInfoList[2]
}
}
extension ViewController {
func contactInfoToList(contactInfoList: [ContactInfo]) -> [[ContactInfo]] {
var phoneList = [ContactInfo]()
var emailList = [ContactInfo]()
var addressList = [ContactInfo]()
for info in contactInfoList {
switch info.contactInfoType {
case .Phone:
phoneList.append(info)
case .Email:
emailList.append(info)
case .Address:
addressList.append(info)
}
}
return [phoneList, emailList, addressList]
}
}
答案 0 :(得分:1)
两个选项:
省略扩展名并将代码放入init
方法
init(contact: ContactStruct, contactInfo: [ContactInfo]) {
self.contact = contact
self.contactInfo = contactInfo
var phoneList = [ContactInfo]()
var emailList = [ContactInfo]()
var addressList = [ContactInfo]()
for info in contactInfo {
switch info.contactInfoType {
case .Phone:
phoneList.append(info)
case .Email:
emailList.append(info)
case .Address:
addressList.append(info)
}
}
self.contactInfoPhoneList = phoneList
self.contactInfoEmailList = emailList
self.contactInfoAddressList = addressList
super.init(nibName: nil, bundle: nil)
}
使用初始化程序声明编译器抱怨的var
常量
var contactInfoPhoneList = [ContactInfo]()
var contactInfoEmailList = [ContactInfo]()
var contactInfoAddressList = [ContactInfo]()