swift - 使用函数中的两个值

标签 swift function

我已经开始使用 Swift 制作一个基本的问答游戏。我编写了一个结构来定义我想要与每个问题相关的内容:

struct Question {
  let question: String
  let answers: [String]
  let correctAnswer: Int
}

该游戏将是一个基本的数学测验,因此将显示随机的数学问题。我编写了一个函数来随机化问题并获取答案:

func questionAnswerBuilder() -> (question: String, answer: String) {
let first: Int = randomNumber()
let second: Int = randomNumber()
let arr = [first,second].sorted(by: >)

let firstAsString = String(arr[0])
let secondAsString = String(arr[1])

let questionString = "\(firstAsString) + \(secondAsString)"
let question = questionString

//Answer:
let answerString = first + second
let answer = String(answerString)

return (question, answer)
}

我已经在 Playground 上测试过了,效果很好。每次它都会创建一个随机数并将其与正确答案一起输出。现在我想在每个问题中使用它......

var questionTest = questionAnswerBuilder()

var questions: [Question] = [
Question(question: questionTest.question, answers: [randomAnswer(), randomAnswer(), questionAnswerBuilder().answer, randomAnswer()], correctAnswer: 2),
Question(question: questionTest.question, answers: [randomAnswer(), randomAnswer(), questionAnswerBuilder().answer, randomAnswer()], correctAnswer: 2)
]

有关信息,randomAnswer()此处不显示功能。它基本上只是一个随机数生成器。

当我将所有这些输入 Xcode 时,我收到以下消息: Cannot use instance member 'questionTest' within property initializer; property initializers run before 'self' is available .

我目前有 questionAnswerBuilder()函数在它自己的 swift 文件中。我尝试将其移至与我的 questions 相同的文件中变量,但我仍然遇到同样的错误。我也尝试过制作 questionTest变量懒惰但这没有什么区别。

请有人指出我错在哪里!

提前致谢!

最佳答案

您无法初始化类顶层相互依赖的属性。

解决方案是延迟初始化问题

lazy var questions: [Question] = {
    return [Question(question: questionTest.question, answers: [randomAnswer(), randomAnswer(), questionAnswerBuilder().answer, randomAnswer()], correctAnswer: 2),
            Question(question: questionTest.question, answers: [randomAnswer(), randomAnswer(), questionAnswerBuilder().answer, randomAnswer()], correctAnswer: 2)]
}()

关于swift - 使用函数中的两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53460091/

相关文章:

swift - 静默主线程检查器以执行特定操作

swift - 二元运算符 '~=' 不能应用于类型 'String' 和 'String?' 的操作数

ios - 如何以编程方式创建可编辑的 UITextField

c++ - 将数组从 C++ 构造函数传递给函数

c - 为什么 `system("cls")` 仅当由某个函数调用时才有效?

c++ - 无论如何,在 c++ 中是否有一个类的函数,每个类的对象都为该函数做不同的事情?

ios - 尝试在 webKit 上获取返回按钮

Javascript函数返回总是未定义

r - 列表中多个数据框的摘要统计

ios - 使用 Firebase 发送消息