Swift 可选的 inout 参数和 nil

标签 swift option-type

是否可以在 Swift 中为函数添加一个 Optional inout 参数?我正在尝试这样做:

func testFunc( inout optionalParam: MyClass? ) {
    if optionalParam {
        ...
    }
}

...但是当我尝试调用它并传递 nil 时,它给我一个奇怪的编译错误:

Type 'inout MyClass?' does not conform to protocol 'NilLiteralConvertible'

我不明白为什么我的类在已经声明为可选时必须遵守某些特殊协议(protocol)。

最佳答案

它不会编译,因为该函数需要一个引用,但您传递了 nil。该问题与可选无关。

通过使用 inout 声明参数意味着您将在函数体内为其分配一些值。它如何为 nil 赋值?

你需要这样调用它

var a : MyClass? = nil
testFunc(&a) // value of a can be changed inside the function

如果您了解 C++,那么这是没有可选代码的 C++ 版本

struct MyClass {};    
void testFunc(MyClass &p) {}
int main () { testFunc(nullptr); }

你有这个错误信息

main.cpp:6:6: note: candidate function not viable: no known conversion from 'nullptr_t' to 'MyClass &' for 1st argument

这有点等同于你得到的(但更容易理解)

关于Swift 可选的 inout 参数和 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24690710/

相关文章:

swift - 在 SwiftUI 中的非 View 类之间传递环境对象

java - If else 使用 Optional 类执行代码

java - Java 中 Optional<T> 的 GC 开销

java - 如何在上述情况下使用 Java 8 Optional?

arrays - Swift:如何对 Array<String> 进行排序

ios - 我如何判断我的计时器是否按时进行?

swift - inout String 不能转换为 Swift 3 范围内的 String

swift - 为什么我的 UIAlert 上的按钮重复?

java - 如果存在,则将 Optional 的值分配给变量

java - 需要有关 Java 1.8 的帮助 可选 map