从初始化程序返回而不初始化所有存储的属性Xcode 8
问题描述:
我升级到Xcode 8并且我的应用程序停止工作,并且我已经能够修复一切,但是出现了这一个错误。我一直在网上寻找,我还没有找到这个错误的修复。任何帮助,将不胜感激。 下面是代码:从初始化程序返回而不初始化所有存储的属性Xcode 8
struct Party {
let itemRef:FIRDatabaseReference?
//
let userID:String!
let name:String!
let title:String!
let body:String!
init (userID:String, name:String, title:String = "", body:String) {
self.userID = userID
self.name = name
self.title = title
self.body = body
self.itemRef = nil
}
init (snapshot:FIRDataSnapshot) {
userID = snapshot.key
itemRef = snapshot.ref
if let titl = snapshot.value as? [String:AnyObject] {
for child in titl{
let shotKey = snapshot.children.nextObject() as! FIRDataSnapshot
if let title = child.value as? [String:AnyObject]{
let title = title["title"]
print(title)
}
}
}else{
title = "Failed To Display Title"
}
if let user = snapshot.value as? [String:AnyObject] {
for child in user{
let shotKey = snapshot.children.nextObject() as! FIRDataSnapshot
if let name = child.value as? [String:AnyObject]{
let name = name["name"]
print(name)
}
}
}else{
name = "Failed To Display Name"
}
if let partyBody = snapshot.value as? [String:AnyObject]{
for child in partyBody{
let shotKey = snapshot.children.nextObject() as! FIRDataSnapshot
if let body = child.value as? [String:AnyObject]{
let body = body["body"]
print (body)
}
}
}else{
body = "Failed To Display Time"
}
}
func toAnyObject() -> Any {
return ["title":title, "name":name, "body":body]
}
}
答
你的第二个init(snapshot:)
函数不设置一定的条件下name
,title
和body
性能。
你必须为title
验证码:
if let titl = snapshot.value as? [String:AnyObject] {
for child in titl{
let shotKey = snapshot.children.nextObject() as! FIRDataSnapshot
if let title = child.value as? [String:AnyObject]{
let title = title["title"]
print(title)
}
}
}else{
title = "Failed To Display Title"
}
此代码仅设置了else
子句中的title
财产。在if
部分中title
的四个引用是对局部变量title
的引用,而不是名为title
的属性。所以编译器会抱怨你永远不会设置title
属性,因为有一个可能的代码路径没有设置。
对于name
和body
,您有同样的问题。