gpt4 book ai didi

swift - 什么是 NSObject 的 swift 等价物?

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

我有一个类需要设置一个 NSObject 子类的变量并且实现了某个协议(protocol)。

protocol ProtoTest {
var foo: Int { get set }
}


class AClass: NSObject, ProtoTest {
var foo: Int = 3
}


class BClass: NSObject, ProtoTest {
var foo: Int = 4
}

class Consumer {

var protoInstance: ProtoTest? //Does not cary any information of the class just the protocol
var protoInstance2: protocol<NSObjectProtocol, ProtoTest>?

init(x: ProtoTest) {
self.protoInstance = x
self.protoInstance2 = nil
}

init(x: protocol<NSObjectProtocol, ProtoTest>) {
self.protoInstance2 = x
self.protoInstance = nil
}

func doSomething() {
if let x = protoInstance {
x.copy() //'ProtoTest' does not have a member named 'copy'
}
if let x = protoInstance2 {
x.copy() //protocol<NSObjectProtocol, ProtoTest> does not have a member named 'copy'

}
}
}

在上面的例子中,变量的声明都不起作用。因为他们都不了解基类?

我如何在 swift 中实现它?

最佳答案

通常 相当于NSObject<Protocol>在 Swift 中就是 Protocol .通常,此协议(protocol)被声明为类协议(protocol),以保证它将被类采用。

如果你还需要 NSObject 协议(protocol)方法(比如 respondsToSelector: ,那么让 Protocol 采用 NSObjectProtocol。

如果问题仅仅是你想调用copy()并且你不能说服编译器让你这样做,然后也采用 NSCopying(或者只使用 respondsToSelector:performSelector: 来完全绕过编译器)。

关于swift - 什么是 NSObject<Protocol> 的 swift 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31948631/

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