可选类型“问题”的值必须解包才能引用包装后的基本类型“ Question”的成员“ questionText”

时间:2019-01-08 20:45:38

标签: ios arrays swift

我正在制作一个小的问答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访问数组,但我希望每次启动应用程序时,第一个问题是一个随机元素。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

看起来firstQuestion可以是nil,所以它的类型为Question?。如果要使用其questionText属性,则必须解开问题。一种方法是通过可选绑定

if let firstQuestion = allQuestions.list.randomElement() {
    questionLabel.text = firstQuestion.questionText
}

答案 1 :(得分:1)

如果list为空,将没有可供选择的元素,并且randomElement将返回nil。这类似于.first.last属性。

您可以使用可选的链接简单地处理此问题:

let firstQuestion: Question? = allQuestions.list.randomElement()
questionLabel.text = firstQuestion?.questionText

由于list可能永远不会为空,因此这种情况实际上永远不会发生。我们只需要处理这个问题,因为编译器无法确定。