我有以下型号:
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!
但是仍然会导致同样的错误。什么是正确的方法?
答案 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
}