如何从实例方法

时间:2018-11-23 02:19:40

标签: objective-c swift

考虑这样的方法:

- (instancetype)sizeFit {
    [self sizeToFit];
    return self;
}

它对于方法链接很有用,我在框架中编写了这样的完整api,并希望将其移至Swift,在这里搜索问题,但发现了一些复杂的答案,而不是否,这是普通可读方式无法实现的。

2 个答案:

答案 0 :(得分:1)

非常简短的答案是没有,没有直接对等的答案。

更详细的答案是语言在概念上是不同的。

  • 在Objective-C中,返回的任何对象都是id对象。使用instancetype是对特定类型的编译器和IDE的提示,以允许进行进一步检查和自动完成。这适用于子类和扩展。
  • Swift是强类型的,没有基础对象,我们也有类和结构。函数只能返回特定类型Self,泛型或associatedtype。最好的近似方法是将此功能移至extensionprotocol中并使用Self。这将以相同的方式工作。在子类环境中没有与此等效的方法。

详细的答案Return instancetype in Swift

答案 1 :(得分:0)

谢谢,总之,这是迅速返回实例类型的等效方法:

extension UIView {
    func someFunctionThatReturnInstanceTypeInAllSubclassesOfView() -> Self {
        return self
    }
}

虽然它不能在课堂上工作。