作为序幕,我是新手。
我正在从一个类构建一个应用程序,该类具有一个带有数组的模型。访问数组我试图设置带有新问题的标签文本。
我从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'导致我认为我遇到数据类型问题。
感谢您的帮助。
答案 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?