Objc 代码找不到 swift 中定义的 Bool 变量

Posted

技术标签:

【中文标题】Objc 代码找不到 swift 中定义的 Bool 变量【英文标题】:Objc code cannot find Bool variable defined in swift 【发布时间】:2014-11-08 02:58:34 【问题描述】:

我在一个 Swift 文件中定义了一个 var,但是在另一个 Objective-C 文件中,当我尝试设置这个 var 时,编译器抱怨它找不到该 var。我该如何解决这个问题?这是代码: 迅速:

var isCreating: Bool!

在 objc 中:

SelectMemberViewController *ctrl = [[SelectMemberViewController alloc]init];
ctrl.isCreating = YES

然后编译器抱怨:在“SelectMemberViewController”类型的对象上找不到属性“isCreating”

【问题讨论】:

它在框架中吗?你在课堂上测试过其他功能吗?如果它在框架中,则需要将其声明为公共的。 太模糊了。显示 Swift 中的实际声明、Objective-C 文件中的实际调用以及实际的编译器消息。 @chrisco 我从不声明任何“公共”类型的东西,似乎 swift 类中的 vars 或 vals 是默认可访问的,只要您持有该对象,对吗? 【参考方案1】:

问题是在 Objective-C 的世界中没有任何东西对应于 Bool!。因此,这个声明不会暴露给 Objective-C。如果您希望 Objective-C 能够看到它,则需要将其声明为普通的 Bool

【讨论】:

是的,解决了,谢谢,是不是因为objc中的Bool是原语,所以不对应任何可选类型? 是的。或者从 Swift 的术语来看,它不是 AnyObject,在 ObjectiveC 中只有 AnyObject 可以为 nil(一个 id)。 var isCreating: Bool = false。最初的第一次是修复它。

以上是关于Objc 代码找不到 swift 中定义的 Bool 变量的主要内容,如果未能解决你的问题,请参考以下文章

可以在 Obj C 中链接,找不到符号,也不会在 Swift 中链接

Swift & ObjC 桥 - 找不到“WKNavigationDelegate”的协议声明

dyld:找不到符号:尝试在iOS7上运行时_OBJC_CLASS_$_UIUserNotificationSettings [重复]

归档应用程序时找不到 Swift Objective-C 标头

没有 use_frameworks 就无法安装 Swift cocoapod!找不到模块 swift.h 文件

自定义 cocoapod 找不到 swift 文件