私は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」の値がない場合) にクラッシュする可能性があります。
上記の質問について 2 つの考えがあります。
- 次のようなプロパティのデフォルト値を指定します。
var name = ""
次のように、ワープを解除する前に値をテストします。
if let foo = user.name { nameLabel.text = foo }
最初の方法を選択したい理由は次のとおりです。
- ラベルにデフォルトの文字列を表示することは、オプションの値のワープを解除できないため、クラッシュよりもはるかに受け入れられると思います。
- 使用する値がさらに多くなると、コードが非常に長くなり、読みにくくなります。
私は正しいものを選びましたか?または、どちらもオプションの値の使用法を理解していませんでした。より良い方法はありますか? 誰かが私を助けることができますか?