【问题标题】:Using two values from a function [duplicate]使用函数中的两个值[重复]
【发布时间】:2018-11-24 16:22:49
【问题描述】:

我已经开始使用 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)
}

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

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.

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

请请有人指出我哪里出错了!

提前致谢!

【问题讨论】:

    标签: swift function


    【解决方案1】:

    您不能在类的顶层初始化相互依赖的属性。

    一种解决方法是懒惰地初始化questions

    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)]
    }()
    

    【讨论】:

    • 效果很好!非常感谢您的帮助!
    【解决方案2】:

    哦,你不能在其他实例变量中使用实例变量。

    您可以通过将 questions 数组更改为 lazy var questions 来解决此问题。

    这不会在实例化时创建数组。它只会在您第一次访问时创建数组。

    【讨论】:

    • 感谢您的回答。我已经看过您标记为重复的帖子 - 现在更有意义了!谢谢
    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 2015-09-16
    • 2011-04-18
    • 2011-03-09
    • 2016-03-16
    • 2015-10-31
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多