use*_*197 7 swift forced-unwrapping swifty-json
当我要为第二个视图解雇我的segue时,我也会发送一些像这样的值:
if let aTime = ads[indexPath.row]["unix_t"].int {
toView.time = aTime
}
if let aTitle = ads[indexPath.row]["title"].string {
toView.title = aTitle
}
Run Code Online (Sandbox Code Playgroud)
在第二个VC我宣布变量如下:
var time: Int?
var title: String?
Run Code Online (Sandbox Code Playgroud)
这就是我解开值的方式:
if time != nil {
timeLabel.text = String(time!)
}
if title != nil {
titleLabel.text = title!
}
Run Code Online (Sandbox Code Playgroud)
这一切都有效我从来没有得到任何由未包装的varibles或nil值引起的错误.但有没有更简单的方法呢?
现在感觉我检查太多了
kei*_*ter 10
我可以想到三种选择.
if/let.与您当前的选项非常相似,但您不必隐式解包.
if let time = time {
timeLabel.text = "\(time)"
}
if let title = title {
titleLabel.text = title
}
Run Code Online (Sandbox Code Playgroud)
你甚至可以在同一条线上打开它们.这样做的缺点是,如果其中一个是nil,那么两个标签都不会被设置.
if let time = time, let title = title {
timeLabel.text = "\(time)"
titleLabel.text = title
}
Run Code Online (Sandbox Code Playgroud)guard/let.如果这些功能类似setupViews(),那么您可以像这样单行解包:
func setupViews() {
guard let time = time, let title = title else { return }
timeLabel.text = "\(time)"
titleLabel.text = title
}
Run Code Online (Sandbox Code Playgroud)您可以使用默认值和??操作员快速解包.
timeLabel.text = "\(time ?? 0)"
titleLabel.text = title ?? ""
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
6606 次 |
| 最近记录: |