gpt4 book ai didi

swift - 我可以在 Swift 中将默认类型分配给泛型类型 T 吗?

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

我有一个泛型类,我希望它能够与默认类型一起使用。现在我可以用任何类型初始化它,但我必须明确。

//Initialize with a type
MyManager<MyCustomerObject>()

// Initialize with NSObject (what I want to be my default type)
MyManager<NSObject>()

// This doesn't work, but I want this kind of functionality
class MyManager<T = NSObject> {}

// So I can create my manager like so and it inserts the default type as NSObject
MyManager() //Or MyManager<>()

这在 Swift 中可能吗?

最佳答案

不支持默认的通用参数,但您可以通过定义默认的 init() 来伪装它在类型受限的扩展上,在这种情况下,编译器将足够聪明地使用该类型。例如:

class MyManager<T> {
let instance: T

init(instance: T) {
self.instance = instance
}
}

extension MyManager where T == NSObject {
convenience init() {
self.init(instance: NSObject())
}
}

现在你可以不带参数初始化类型,它默认为MyManager<NSObject> :

let mm1 = MyManager(instance: "Foo") // MyManager<String>
let mm2 = MyManager(instance: 1) // MyManager<Int>
let mm3 = MyManager() // MyManager<NSObject>

SwiftUI 大量使用了这种技术。

关于swift - 我可以在 Swift 中将默认类型分配给泛型类型 T 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42015081/

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