扩展整个类的功能

时间:2018-06-15 00:17:21

标签: swift swift4

Swift,是否可以扩展整个类的功能?

我的意思是,我正在尝试(这没有任何真正的目标),我想从我的class或我的Codable延伸。

但是,我收到了这个错误:

extension AnyClass

  

无法扩展元类型'AnyClass'(又名'AnyObject.Type')

有可能吗?

2 个答案:

答案 0 :(得分:1)

你的问题不明确但猜测我认为你希望能够像你一样扩展程序中的所有类,比如Objective-C,Swift中不存在等价物。

在Objective-C / Cocoa中,绝大多数类[1]直接或通过祖先从NSObject类派生 - NSObject称为基类 (通常用于Objective-C& Swift)或根类(通常用于Java和C#)。通过使用Objective-C 类别,您可以向NSObject添加方法,然后由其所有子类继承。

Java和C#等语言类似于Objective-C有一个根类 - Object&分别为System.Object

Swift和Swift标准库没有一个基类,一个类可能被声明为从超类继承但如果没有指定超类,则该类是基类< / em>的。鉴于没有公共基类,没有可以扩展的类,这会导致将方法添加到所有类型。

Swift类型AnyAnyObjectAnyClass不是类类型,并不代表基类。 AnyClass是元类型,即类型的类型,并且您的错误消息表明Swift不支持元类型的扩展。

HTH

[1] Objective-C本身没有定义公共基类,因此它类似于Swift。然而,主要(Apple)Cocoa框架确实如此,它与Swift标准库不同。

答案 1 :(得分:0)

我找到了一个符合我问题的答案

Why is there no universal base class in Swift?

Objective-C中有多个根类,您可以通过不指定超类来定义新的根类。正如Sulthan还提到的,Cocoa本身有几个根类NSObjectNSProxyObjectProtocolObjC 1.0的根类。)