gpt4 book ai didi

swift - 我应该如何打开一个可选但最有可能设置的成员变量?

转载 作者:行者123 更新时间:2023-11-28 11:24:14 25 4
gpt4 key购买 nike

我有一个类在 init/constructor 中运行一个函数,该函数循环遍历...

struct Answer {
let correct: Bool
let text: String
}

...并搜索将正确 bool 变量设置为true 的对象。循环和搜索是通过一个名为 getCorrectId() 的函数完成的,该函数返回一个索引,指向放置 correct: trueAnswer 所在的位置。

函数是这样实现的:

private func getCorrectId() -> Int? {
for i in 0..<self.answers.count {
if self.answers[i].correct {
return i
}
}

return nil
}

如您所见,该函数返回一个可选的整数。在 99.9% 的情况下,它不应该失败,如果它失败了,那是因为我自己在代码的某个地方犯了一个逻辑编程错误。

SolutionHandler 类,包括 init() 和 getCorrectId() 函数

struct Answer {
let correct: Bool
let text: String
}

class SolutionHandler {

var correctId: Int?
var answers = [Answer]()

init(correctSolution: String, incorrectSolutions: [String]) {

// Add the correct solution to the answers array
self.answers.append(Answer(correct: true, text: correctSolution))

// Add the incorrect solutions to the answers array
for incorrectSolution in incorrectSolutions {
self.answers.append(Answer(correct: false, text: incorrectSolution))
}

// Shuffle the answers to make them random in array
self.answers.shuffle()

<-- IMPORTANT PART

// Find the correct id (with forced unwrap)
self.correctId = getCorrectId()!

-->
}

private func getCorrectId() -> Int? {
for i in 0..<self.answers.count {
if self.answers[i].correct {
return i
}
}

return nil
}
}

那么,对于我的主要问题……我应该如何打开这个可选的包装?如果getCorrectId() 函数失败,我是否应该将类SolutionHandler 设置为nil 是否可以强制解包并在我处理它时处理它创建类?或者我是否应该在创建此类时抛出自定义错误并捕获它?

提前致谢! :)

最佳答案

你已经知道哪个是正确的;它始终是第一个,正如您构造 answers 数组的方式所保证的那样。

我认为该问题的更好解决方案是不要将所有答案混合到一个数组中。像这样:

class SolutionHandler { // FIXME: this is probably a bad name for this, and it should probably be a struct.
let correctAnswer: Answer
let incorrectAnswers: [Answer]
var answers: [Answer] { incorrectAnswers + [correctAnswer] }

init(correctSolution: String, incorrectSolutions: [String]) {
self.correctAnswer = Answer(correct: true, text: correctSolution)
self.incorrectAnswers = incorrectSolutions.map { Answer(correct: false, text: $0) }
}
}

关于swift - 我应该如何打开一个可选但最有可能设置的成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58808231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com