gpt4 book ai didi

swift - 空合并运算符的简写和可重新生成属性的赋值?

转载 作者:可可西里 更新时间:2023-11-01 01:32:01 24 4
gpt4 key购买 nike

在我的属性中,我在返回属性之前为其赋值。下次访问它时,它会检查它是否为 nil 并再次分配它或只返回实例。

这就是我现在的做法:

private var _myProp: MyInstance?

public var myProp: MyInstance {
if _myProp == nil {
_myProp = MyInstance()
}
return _myProp!
}

这看起来很不像 Swift,并且希望有一种更优雅的方式来做到这一点。例如,在 C# 中我可以这样做:

private var _myProp: MyInstance?

public var myProp: MyInstance {
return _myProp ?? (_myProp = MyInstance())
}

我正在尝试允许重新生成该属性,以便它可以被释放,但下次访问它时它将再次创建实例。

Swift 中有类似的东西吗?

最佳答案

Swift 中的类似符号是:

private var _myProp: MyInstance?

public var myProp: MyInstance {
return _myProp ?? {_myProp = MyInstance(); return _myProp!}()
}

但我不知道它真的更像 Swift 还是更常见......

如果您经常使用这种模式,最好只创建一个全局函数来提供帮助,如下所示:

func retrieve<T>(_ property:inout T?, withDefault value:T)->T {
if property == nil {
property = value
}
return property!
}

然后你的代码变成:

private var _myProp: MyInstance?

public var myProp: MyInstance {
return retrieve(&_myProp, withDefault:MyInstance())
}

根据我的经验,函数通常比自定义运算符或重载更容易被其他人理解、阅读和调试。

关于swift - 空合并运算符的简写和可重新生成属性的赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213733/

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