Ios 从初始值设定项返回,不初始化所有存储的属性Xcode 8

Ios 从初始值设定项返回,不初始化所有存储的属性Xcode 8,ios,swift,Ios,Swift,我升级到Xcode 8,我的应用程序停止工作,除了这一个错误,我已经能够修复一切。我一直在网上查找,但尚未找到此错误的修复方法。任何帮助都将不胜感激。 代码如下: struct Party { let itemRef:FIRDatabaseReference? // let userID:String! let name:String! let title:String! let body:String! init (us

我升级到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(快照:)
函数不会设置
名称
标题
、正文属性

您将此代码用于
标题

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
属性,因为可能存在未设置的代码路径

对于
名称
正文
,您有相同的问题