我将课程ScoreModel
简化为:
class ScoreModel {
var teamName : String!
}
可以将其置于Init()
函数中,因为它需要始终设置,但这无助于我对问题的理解:
我有一个ScoreViewController : UIViewController
,我使用非可选的ScoreModel
:
class ScoreViewController {
var scoreModel : ScoreModel!
}
使用prepareForSegue
传递。这一切都有效,但是当我想获得teamName时,它将作为可选项返回:
override func viewWillAppear(_ animated : Bool) {
let name = scoreModel.teamName
print(name)
}
此输出:
Optional("teamNameEntered")
但该变量在ScoreModel中标有感叹号,因此应该将其解包。为什么它仍然返回一个可选的?
编辑: 按要求使用prepareForSegue方法:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? ScoreViewController {
let scoreModel = self.scoreModel ?? ScoreModel()
destinationVC.scoreModel = scoreModel
}
}
答案 0 :(得分:0)
首先,您的scoreModel
是not non-optional
。
您可以使用感叹号而不是a来声明可选变量 问号。这些可选变量将自动解包 您不需要在结尾使用任何进一步的感叹号 变量来获取指定的值。
在您的情况下,您可以为teamName
分配可选值或非可选值。因此,如果为其分配了可选值,则需要将其解包以供使用。