【发布时间】:2020-04-06 10:30:11
【问题描述】:
我在我的 Objective-C 项目中使用 Swift CocoaPod。最初它是一个 Swift 3 项目,我只需将 #import "<Project Name>-Swift.h" 添加到我的 .m 或 .h 文件中。我已经更新到最新版本的 CocoaPod,我相信它现在是 Swift 5。因此这不再有效,因为找不到任何属性。
我查看了许多不同的在线资源,包括 Apple 的文档,但这里的程序不清楚该怎么做。看来我必须进入并编辑.swift 文件并在我希望访问的每个属性或方法前面添加@objc?这似乎与 CocoaPods 的意图背道而驰,因为下次我更新所有更改时都会被吹走。
我尝试查看生成的标题,但是当我突出显示 #import "<Project Name>-Swift.h" 行时,我只是被带到了 NSObject 声明。显然,这只是我猜测的构建时间项目。
根据 Apple 文档 (https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c),Swift 声明必须标有 public 或 open 修饰符,当我检查 swift 文件时,我发现它们确实如此。
我使用的吊舱是 HGCircularSlider。我尝试访问的示例在 RangeCircularSlider 类中:
open var startPointValue: CGFloat = 0.0 {
didSet {
guard oldValue != startPointValue else { return }
if startPointValue < minimumValue {
startPointValue = minimumValue
}
if distance > 0 {
endPointValue = startPointValue + distance
}
setNeedsDisplay()
}
}
正如我们在这里看到的,声明是公开的。我假设我需要设置某种构建设置?
此外,我在我的 Podfile 中设置了 use_frameworks!。我还检查了 pod 项目中的构建目标和 Objective-C 生成的接口标题名称是 HGCircularSlider-Swift.h。这正是我在 Objc .m 文件中使用的内容。
欢迎任何想法或建议我应该去哪里看?
更新 1
还有一点值得注意。在我的 .h 和 .m 中,我有一个 RangeCircularSlider 类型的 @property,它可以很好地看到。那里没有错误。它正在访问导致错误的对象中的属性和方法。
在“RangeCircularSlider *”类型的对象上找不到属性“startPointValue”
所以它看到了 swift 文件,但正如最初所说,找不到任何属性。
更新 2
所以我发现,如果我将 @objc 添加到我试图在 Swift 文件中访问生成的头文件的各个属性的前面,然后查看它们,因此我可以访问它们。因此,对于上面的示例函数,它将是
@objc open var startPointValue: CGFloat = 0.0 {
但是,当我想安装此 CocoaPod 的更新版本时,这些似乎有点小题大做,那么我对 pod 文件所做的那些更改就会被吹走。
有什么建议可以在无需编辑 CocoaPod 中的 swift 文件的情况下执行此操作吗?
【问题讨论】:
标签: objective-c swift cocoapods