gpt4 book ai didi

swift - 对 swift 中的可选值感到困惑

转载 作者:可可西里 更新时间:2023-11-01 00:21:36 26 4
gpt4 key购买 nike

我是 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”没有值),它可能会崩溃。

对于上面的问题我有两个想法:

  1. 为属性提供默认值,例如:var name = ""
  2. 在展开之前测试值,例如:

    if let foo = user.name {
    nameLabel.text = foo
    }

我想选择第一种方式,因为:

  1. 我认为在标签上显示默认字符串比崩溃更容易接受,因为无法取消扭曲可选值。
  2. 当我有更多的值要使用时,代码会很长且难以阅读。

我选对了吗?或者他们两个都不明白可选值的用法,有更好的方法吗?有人可以帮助我吗?

最佳答案

你可以安全地解包一个可选的或给它一个默认值而不用像这样声明一个新变量:

nameLabel.text = user.name ?? ""

这称为 nil 合并运算符,它将尝试解包一个可选值,如果解包不成功,将为其提供您放置在运算符 rhs 上的默认值。

关于swift - 对 swift 中的可选值感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38904136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com