2016-09-27 26 views
2

我升级到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] 
    } 
} 

回答

1

你的第二个init(snapshot:)函数不设置一定的条件下nametitlebody性能。

你必须为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属性,因为有一个可能的代码路径没有设置。

对于namebody,您有同样的问题。