考虑这样的方法:
- (instancetype)sizeFit {
[self sizeToFit];
return self;
}
它对方法链接很有用,我的框架中有这样写的整个api,我想把它移到Swift,在这里搜索问题,但只找到了一些复杂的答案,而不是否定的,这在正常可读的方式中是不可能的。
简单的答案是否定的,没有直接的等价物。
更详细的答案是,语言在概念上是不同的。
- 在Objective-C中,返回的任何东西都是一个对象,也称为
id
。对于特定类型,使用instancetype
是对编译器和IDE的提示,以允许进一步检查和自动完成。这适用于子类和扩展 - Swift是强类型的,没有基对象,我们也有类和结构。函数只能返回特定类型
Self
、泛型类型或associatedtype
。最好的近似是将此功能移动到extension
或protocol
中并使用Self
。这将以同样的方式工作。在子类上下文中,这是不等价的
Swift 中返回实例类型的详细答案
谢谢,简而言之,这是swift中返回实例类型的等效方法:
extension UIView {
func someFunctionThatReturnInstanceTypeInAllSubclassesOfView() -> Self {
return self
}
}
不过在课堂上不起作用。