我有以下型号:
class Word: NSManagedObject {
@NSManaged var definitions: NSSet
}
Run Code Online (Sandbox Code Playgroud)
然后,在我的一个视图控制器中,我有以下属性:
var word: Word?
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试这样做:
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int
{
return self.word?.definitions.count
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
可选类型'Int?'的值 没有打开; 你的意思是用'!' 要么 '?'?
根据文档,可选链接调用的值也是可选的,因此.count应返回可选的Int.所以我尝试打开它:
return self.word?.definitions.count!
Run Code Online (Sandbox Code Playgroud)
但这仍然会导致同样的错误.这样做的正确方法是什么?
dre*_*wag 18
问题是操作的顺序.最简单的方法是停止可选的链接(如果你真的不想处理零的情况).
return self.word!.definitions.count
Run Code Online (Sandbox Code Playgroud)
但我建议这样做是为了安全:
if let actualWord = self.word {
return actualWord.definitions.count
}
else {
return 0
}
Run Code Online (Sandbox Code Playgroud)
甚至更短:
return self.word ? self.word!.definitions.count : 0
Run Code Online (Sandbox Code Playgroud)
否则,您也可以声明word为隐式解包的可选项,而不必担心它:
var word: Word!
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int
{
return self.word.definitions.count
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23078 次 |
| 最近记录: |