Optional inoutSwift中的函数是否可以具有参数?我正在尝试这样做:
Optional
inout
func testFunc( inout optionalParam: MyClass? ) { if optionalParam { ... } }
…但是当我尝试调用它并通过时nil,它给了我一个奇怪的编译错误:
nil
Type 'inout MyClass?' does not conform to protocol 'NilLiteralConvertible'
我不明白为什么我的类已经被声明为可选的,所以必须遵循某些特殊的协议。
它不会编译,因为该函数需要引用,但是您通过了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
这相当于您所获得的(但更容易理解)