gpt4 book ai didi

Swift 可选的 inout 参数和 nil

转载 作者:IT王子 更新时间:2023-10-29 05:15:31 25 4
gpt4 key购买 nike

是否可以在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com