我是 swift 新手,我不太了解如何正确使用可选值。
情况是:首先,我有一个模型类来存储其属性的一些值并将请求发送到服务器以获取值。代码:
import Foundation
class User: NSObject {
var name: String?
func getInfo(updateUI: () -> ()) {
let manager = AFHTTPSessionManager()
manager.POST(URLString, parameters: nil, success: { (task: NSURLSessionDataTask, responseObject: AnyObject?) in
let dic = responseObject as? NSDictionary
self.name = dic?.objectForKey("name")
updateUI()
}, failure: { (task: NSURLSessionDataTask?, error: NSError) in
log.obj(error)
})
}
其次,我想在 ViewController 中使用这个模型来从服务器获取值并更新 UI。代码:
class UserViewController: UIViewController {
@IBOutlet var nameLabel: UILabel!
var user = User()
override func viewDidLoad() {
super.viewDidLoad()
user.getInfo({
nameLabel.text = user.name!
})
}
}
我认为处理这项工作是一种危险的方式,因为当我想把它放在标签上时,没有什么能确保我有一个特定的名字。它在大多数情况下工作得很好,但是当无法从服务器获取正确的值时它可能会崩溃(例如,键“name”没有值)。
关于上述问题,我有两个想法:
- 为属性提供默认值,例如:
var name = ""
在 unwarp 之前测试该值,如下所示:
if let foo = user.name { nameLabel.text = foo }
我想选择第一种方式,因为:
- 我认为在标签上显示默认字符串比崩溃更容易接受,因为无法解开可选值。
- 当我有更多的值要使用时,代码会很长并且难以阅读。
我选对了吗?或者他们俩都不了解可选值的用法并且有更好的方法?有人可以帮助我吗?