swift name mangling
2021-06-28 本文已影响0人
_浅墨_
name mangling
import CoreData
import Foundation
@objc(Location)
public class Location: NSManagedObject {}
(Location) 有什么作用?
这实际上是@objc 属性的一部分。 Swift 编译器使用一种名为 name mangling 的机制在内部重命名方法,以便可以唯一标识它们。
如果在同一个项目中有两个名为 copyFiles 的方法,编译器如何知道特定代码位指的是哪一个呢?因此必须有一种方法来唯一地标识每个方法,以便正确解析所有方法调用。
如果我们的项目只有 Swift 代码,则 Name mangling 工作正常。但是因为可以在同一个项目中混合 Swift 和 Objective-C 代码,有时会在这种“混合”项目中遇到麻烦,因为由于名称修改,Objective-C 无法正确识别 Swift 类。
这在处理归档数据时经常发生,因为归档数据保存了类名。当 Objective-C 无法将它收到的名称与已知类关联时,将会报错。
这是 @objc(Location)(或类似的)符号发挥作用的地方。括号内的部分,告诉编译器,Objective-C 代码将使用该名称来引用这个特定的类。