swift - 增加隐式展开的可选值

标签 swift option-type

我将隐式展开的可选声明声明为:

var numberOfRows: Int!

并在init中初始化它:

numberOfRows = 25

后来我需要将其减一,所以我写道:

numberOfRows--

但这不能编译。错误消息表明减量运算符不能应用于隐式解包的可选值。经过一些实验,我发现以下编译没有错误:

numberOfRows!--

我想了解这一点。对于看起来像多余的“!”的解释是什么?

最佳答案

隐式解包可选本身就是一种类型,与它所包装的类型不同。 可选值隐式解包可选值上的一些运算符是由语言预先定义的,但对于其余的运算符,您必须自己定义它们。

在这种特殊情况下,运算符(operator) postfix func --(inout value: Int!) -> Int!只是没有定义。如果你想使用postfix --运算符 Int!就像您在 Int 上使用它一样那么你必须定义一个。

例如像这样:

postfix func --<T: SignedIntegerType>(inout value: T!) -> T! {
    guard let _value = value else { return nil }

    value = _value - 1
    return _value
}

关于swift - 增加隐式展开的可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33504945/

相关文章:

ios - Xcode/Swift 'filename used twice' 构建错误

ios - 在没有 info.plist key 的情况下启用 Face-ID?

c++ - 传递 std::ref(value) 时是否应应用 std::optional 的推导指南?

ios - 为什么可选 ("Text") - Swift

java - 消除 Java Stream 生成的Optional 中额外的 isPresent() 调用

java - SonarQube 8.1.0 提示在访问该值之前调用 "Optional#isPresent()"

arrays - 字符串快速追加到数组

ios - 调整图像大小 - SDWebImage -

ios - swift 自动布局 : constraints in sub-view not working

ios - 何时在 Swift 中使用可选值 (?) 以及何时使用关联值 (!)?