可选类型'Int?'的值没有打开;你的意思是用'!'要么 '?'?

时间:2014-07-22 00:38:39

标签: swift

我有以下型号:

class Word: NSManagedObject {
    @NSManaged var definitions: NSSet
}

然后,在我的一个视图控制器中,我有以下属性:

var word: Word?

但是,如果我尝试这样做:

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int
{
     return self.word?.definitions.count
}

我收到错误:

  

可选类型的值' Int?'没有打开;你的意思是使用'!'   或者'?'?

根据documentation,可选链接调用的值也是可选的,因此.count应该返回一个可选的Int。所以我尝试打开它:

return self.word?.definitions.count!

但是仍然会导致同样的错误。什么是正确的方法?

1 个答案:

答案 0 :(得分:17)

问题在于操作顺序。最简单的方法是停止可选的链接(如果你真的不想处理零的情况)。

return self.word!.definitions.count

但我建议这样做是为了安全:

if let actualWord = self.word {
   return actualWord.definitions.count
}
else {
   return 0
} 

甚至更短:

return self.word ? self.word!.definitions.count : 0

否则,您也可以将word声明为隐式解包的可选项,而不必担心它:

var word: Word!

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int
{
    return self.word.definitions.count
}