知识卡片

值类型对Objective-C不可见

专业/工作 · 760.a

内容

Swift的结构体、枚举这些值类型完全不存在于Objective-C的类型系统里,无法跨语言边界暴露——一个要被Objective-C代码使用的Swift类型,必须是继承自NSObject的类。这意味着在混编工程里,[[结构体与类的选择准则]]那套”默认优先用结构体、需要引用语义才用类”的建议会被”这个类型是否要跨语言使用”这个外部约束打断:哪怕从纯Swift设计角度看某个模型(如联系人Contact)更适合做成结构体,只要它要出现在Objective-C代码可见的地方,就必须让位给类继承NSObject。这是语言设计理念在现实工程约束前妥协的一个具体例子——值语义再吸引人,也得先能被目标运行时的类型系统识别。

参考来源

《Swift编程权威指南》第28章《互操作》