一尘不染

Swift可选的inout参数和nil

swift

Optional inoutSwift中的函数是否可以具有参数?我正在尝试这样做:

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

…但是当我尝试调用它并通过时nil,它给了我一个奇怪的编译错误:

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

我不明白为什么我的类已经被声明为可选的,所以必须遵循某些特殊的协议。


阅读 234

收藏
2020-07-07

共1个答案

一尘不染

它不会编译,因为该函数需要引用,但是您通过了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

这相当于您所获得的(但更容易理解)

2020-07-07