数组问题; Swift:无法将字符串类型转换为“问题?”

时间:2018-10-16 12:30:08

标签: ios arrays swift

作为序幕,我是新手。

我正在从一个类构建一个应用程序,该类具有一个带有数组的模型。访问数组我试图设置带有新问题的标签文本。

我从xCode收到的错误是
Cannot convert value of type 'Question?' to specified type 'String'

在我的模型中,我有一个.swift文件,其中以下内容定义了我的问题类

  class Question {

    let questionText : String
    let answer : Bool

    init(text: String, correctAnswer: Bool) {
        questionText = text
        answer = correctAnswer
    }
}

在另一个.swift中,我有一系列实际的问题。

class QuestionBank {
    var list = [Question]()

    init() {

        let item = Question(text: "Valentine\'s day is banned in Saudi Arabia.", correctAnswer: true)


        list.append(item)


        list.append(Question(text: "A slug\'s blood is green.", correctAnswer: true))

        list.append(Question(text: "Approximately one quarter of human bones are in the feet.", correctAnswer: true))



    }
}

我的主故事板包含以下代码。这是我收到实际错误的地方;似乎我从问题的类定义中提取的[Question]被Swift解释为一种数据类型,应该是字符串。

class ViewController: UIViewController {

       let allQuestions = QuestionBank()
       var pickedAnswer : Bool = false


    @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

    }


    @IBAction func answerPressed(_ sender: AnyObject) {
        if sender.tag == 1 {
            print("True")
        } else if sender.tag == 2 {
            print("False")
        }


    }


    func updateUI() {

    }


    func nextQuestion() {
        var newQuetion : String = allQuestions.list.randomElement()



    }


    func checkAnswer() {

    }


    func startOver() {

    }



}

我的数据类型有什么问题,最后检查一下,有问题吗?不是数据集类型,并且“无法转换'问题'类型的值?”指定类型'String'导致我认为我遇到数据类型问题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

错误消息非常简单明了。您在说:

var newQuetion : String = allQuestions.list.randomElement()

但是allQuestions.list是一个Question数组,而不是String数组。因此,该数组的随机元素是一个Question,而不是String。您坚持newQuetion(sic)为字符串。不是。只是写

var newQuetion = allQuestions.list.randomElement()

,然后从那里继续。您的newQuetion现在将是一个可选问题。如果需要字符串,则必须解开“可选问题”并获取其questionText

答案 1 :(得分:-1)

这不会编译,因为从randomElement返回的对象不是String的实例,而是Question

var newQuetion : String = allQuestions.list.randomElement()

应该是:

var newQuetion : Question? = allQuestions.list.randomElement()

重要的是Question?是可选的,因为Array<Element>.randomElement()返回Element?