可选类型“问题?”的值必须解包以引用已包装基本类型“问题”的成员“问题文本”
Posted
技术标签:
【中文标题】可选类型“问题?”的值必须解包以引用已包装基本类型“问题”的成员“问题文本”【英文标题】:Value of optional type 'Question?' must be unwrapped to refer to member 'questionText' of wrapped base type 'Question' 【发布时间】:2019-01-08 20:45:37 【问题描述】:我正在制作一个小问答 ios 应用程序。我希望第一个问题是随机的。我的代码如下。
let allQuestions = QuestionBank()
var pickedAnswer : Bool = false
//Place your instance variables here
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var scoreLabel: UILabel!
@IBOutlet var progressBar: UIView!
@IBOutlet weak var progressLabel: UILabel!
override func viewDidLoad()
super.viewDidLoad()
let firstQuestion = allQuestions.list.randomElement();
questionLabel.text = firstQuestion.questionText
我正在使用 .list 访问数组,但我希望每次启动应用程序时第一个问题都是随机元素。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:看起来firstQuestion
可以是nil
,所以它的类型是Question?
。如果你想使用它的questionText
属性,你必须解开你的问题。一种方法是通过可选绑定
if let firstQuestion = allQuestions.list.randomElement()
questionLabel.text = firstQuestion.questionText
【讨论】:
为您的帮助干杯。【参考方案2】:如果list
为空,则没有要选择的元素,randomElement
将返回nil
。这类似于.first
或.last
属性。
您可以简单地使用可选链接来处理:
let firstQuestion: Question? = allQuestions.list.randomElement()
questionLabel.text = firstQuestion?.questionText
由于list
可能永远不会为空,因此这种情况实际上永远不会发生。我们只需要处理它,因为编译器无法确定。
【讨论】:
现在我觉得......我忘了可选链接:( @RobertDresler 这只是因为UILabel.text
可以采用可选的。这只是其中一种选择。以上是关于可选类型“问题?”的值必须解包以引用已包装基本类型“问题”的成员“问题文本”的主要内容,如果未能解决你的问题,请参考以下文章