swift - 可选类型的值必须被解包以引用成员,但它是隐式解包的可选属性
问题描述
为什么我会得到这个?它是一个隐式展开的可选属性。我不认为我应该得到这个错误。我尝试清理我的构建文件夹并删除派生数据,然后关闭 Xcode。没有任何效果。
var questionsWrap: QuestionsWrapper
func userMadeSelection(
_ responseId: Int,
_ myTheir: Question.Response.Selections.MyTheir,
_ choice: Question.Response.Selections.MyTheir.Choice
) {
guard let id = question.id else { return }
questionsWrap.saveSelection(
questionId: id,
responseID: responseId,
myTheir: myTheir,
choice: choice
) { success in
if !success {
AlertViewController<Any>.alertFailure(
message: "We made a mistake and we weren't able to save your selection."
)
}
}
singleQuestionDataSource.observableQuestion.value = question
print(#line, "userMadeSelectionImportance: \(responseId) \(myTheir) \(choice)")
if choice.changedBetweenPolarAndNeutral(
with: questionsWrap.question.theirInteractionStyle
) {
let presenter = Question.Importance.Presenter(question)
update(presenter?.importance)
questionCell?.importancePresenter = presenter
}
}
方法定义
func saveSelection(
questionId: Int,
responseID: Int,
myTheir: Question.Response.Selections.MyTheir,
choice: Question.Response.Selections.MyTheir.Choice,
context: Context,
successAction: SuccessAction? = nil
) {
guard let questionIndex = questions.index(of: questionId),
let responseIndex = questions[questionIndex].responses.index(of: responseID) else {
successAction?(false)
return
}
questions[questionIndex].responses[responseIndex].set(myTheir, choice, for: context)
let response = questions[questionIndex].responses[responseIndex]
URL.make(
my: response.choice(for: .my, UserDefaults.questionContext),
their: response.choice(for: .their, UserDefaults.questionContext),
forResponseID: responseID,
forQuestionID: questionId,
forContext: UserDefaults.questionContext
).get { jsonDict in
successAction?(jsonDict.success)
}
}
不幸的是,我不知道提供什么代码来原子地重新创建这个问题。
我正在超越规范并发布屏幕截图以证明错误正在显示。
解决方案
使用隐式展开的 Optional 看到此错误消息的通常原因是隐式展开不会通过赋值来传播自身。例如,这是合法的:
var s : String!
print(s.count)
但这不是:
let s2 = s
print(s2.count) // value must be unwrapped
推荐阅读
- c++ - boost asio 协程中的 co_await 自定义等待器
- python - 没有名为“配置”的模块
- python - 在我的机器上将 pyobjc 从 7.3 降级到以前的版本
- db2 - 从具有相同结构的两个表中查找不匹配的列
- logstash-logback-encoder - Logstash 编码器不产生正确的 json 格式
- html - 如何在仅黑白范围内更改 CSS mix-blend-mode?
- javascript - Firebase 请求作为明确请求?
- flutter - Flutter App 卡在闪屏是什么原因?
- google-visualization - 使用谷歌图表中的 sankey 图的 SplunkJS 错误
- reactjs - @material-ui/core - 如何设置 Textarea 值