gpt4 book ai didi

swift - 在 Swift 4.1 中使用 NSProxy

转载 作者:搜寻专家 更新时间:2023-10-31 23:07:28 25 4
gpt4 key购买 nike

如何在 Swift 中创建一个 NSProxy 子类?

尝试添加任何 init 方法失败并出现错误:“不能在初始化器之外调用 super 初始化”,或者“在从初始化程序返回之前,不会在所有路径上调用 super 初始化”

error1 error2

使用 Objective-C 子类作为基类是可行的,但感觉更像是 hack:

// Create a base class to use instead of `NSProxy`
@interface WorkingProxyBaseClass : NSProxy
- (instancetype)init;
@end

@implementation WorkingProxyBaseClass
- (instancetype)init
{
if (self) {

}
return self;
}
@end



// Use the newly created Base class to inherit from in Swift
import Foundation

class TestProxy: WorkingProxyBaseClass {
override init() {
super.init()
}
}

最佳答案

NSProxy 是一个抽象类。关于 NSProxy 的 Apple 文档说“一个抽象父类(super class),为对象定义 API,充当其他对象或尚不存在的对象的替身”。

关于维基百科抽象类的文档说:

In a language that supports inheritance, an abstract class, or abstract base class (ABC), is a class that cannot be instantiated because it is either labeled as abstract or it simply specifies abstract methods (or virtual methods).

为抽象类调用 super.init() 是错误的。在第二类中,您不是为抽象类调用 super.init(),而是为具体类调用 WorkingProxyBaseClass。在 Objective c 中,您没有调用 [super init],因此代码可以正常工作。

关于swift - 在 Swift 4.1 中使用 NSProxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49903424/

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