Bridging-header 有效,但导入无效?
Bridging-header works, but imports are not working?
我使用 CocoaPods 安装了一个库,似乎一切正常。我在我的项目中添加了一个 bridging-header,我知道这是有效的,因为我在这个 header 中使用了几个不同的库。但是我刚刚安装并桥接了 libPhoneNumber-iOS 并且它似乎可以工作,除了......它没有。我找到了文件,它在 header 中正确导入了它们,但我无法在 swift 中使用它。应该是NBPhoneNumberUtil
,但是不存在
我在 header:
中像这样导入了它们
#import "libPhoneNumber_iOS/NBPhoneNumberUtil.h"
#import "libPhoneNumber_iOS/NBPhoneNumber.h"
如果我键入任何不同的内容,它会给我一个错误,说它不能指定的文件,所以应该正确导入。此外,如果我在此 header-file 中键入 NBPhoneNumberUtil
,我可以看到 object,因此它可以正常工作。但是在我的 swift-project 中,模块不存在。同样,我知道我的 bridging-file 有效,因为我在这个文件和 swift 中使用了其他库。有什么想法可能是错误的吗?
更新 #1:
所以我尝试将导入添加到我的 swift-file,它 "works"。
import libPhoneNumber_iOS/NBPhoneNumberUtil
import libPhoneNumber_iOS/NBPhoneNumber
除了Xcode抱怨这不是一个可行的语法,它想在某处添加一个分号。但是现在我可以创建我需要的 objects,但我无法编译,因为 Xcode 要我先修复错误。这太奇怪了。有什么想法吗?
答案是在桥接中像这样导入它们 header:
#import "NBPhoneNumberUtil.h"
#import "NBPhoneNumber.h"
我用来测试这个的程序写在下面。
创建一个新的Xcode项目
我为 Objective-C 使用了单视图应用程序模板。
创建 Podfile 并安装
播客文件:
source 'https://github.com/CocoaPods/Specs.git'
pod 'libPhoneNumber-iOS', '~> 0.8'
安装:
$ pod install
创建 Swift 文件
此时 Xcode 创建了桥接 header 文件。
我将导入添加到桥接 header 使用:
#import "NBPhoneNumberUtil.h"
#import "NBPhoneNumber.h"
在Swift文件中,我写了:
class Test {
func test() {
let util = NBPhoneNumberUtil()
}
}
项目编译无误
我现在解决了这个问题。问题是我在 Pod 文件中使用了 use_frameworks!
,所以路径不同。事实上,当您使用 use_frameworks!
时,您不需要桥接 header,并且必须直接在 swift 中导入文件。问题是我不知道如何导入它,但现在我知道了。
pod 文件:
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
platform :ios, '8.0'
target 'test' do
pod 'libPhoneNumber-iOS', '~> 0.8'
end
target 'testTests' do
end
在 Xcode 项目中,您不再需要桥接 header,只需在要使用它的地方导入库,如下所示:
import libPhoneNumber_iOS
现在它应该可以工作了。希望这对其他人有帮助。
我使用 CocoaPods 安装了一个库,似乎一切正常。我在我的项目中添加了一个 bridging-header,我知道这是有效的,因为我在这个 header 中使用了几个不同的库。但是我刚刚安装并桥接了 libPhoneNumber-iOS 并且它似乎可以工作,除了......它没有。我找到了文件,它在 header 中正确导入了它们,但我无法在 swift 中使用它。应该是NBPhoneNumberUtil
,但是不存在
我在 header:
中像这样导入了它们#import "libPhoneNumber_iOS/NBPhoneNumberUtil.h"
#import "libPhoneNumber_iOS/NBPhoneNumber.h"
如果我键入任何不同的内容,它会给我一个错误,说它不能指定的文件,所以应该正确导入。此外,如果我在此 header-file 中键入 NBPhoneNumberUtil
,我可以看到 object,因此它可以正常工作。但是在我的 swift-project 中,模块不存在。同样,我知道我的 bridging-file 有效,因为我在这个文件和 swift 中使用了其他库。有什么想法可能是错误的吗?
更新 #1:
所以我尝试将导入添加到我的 swift-file,它 "works"。
import libPhoneNumber_iOS/NBPhoneNumberUtil
import libPhoneNumber_iOS/NBPhoneNumber
除了Xcode抱怨这不是一个可行的语法,它想在某处添加一个分号。但是现在我可以创建我需要的 objects,但我无法编译,因为 Xcode 要我先修复错误。这太奇怪了。有什么想法吗?
答案是在桥接中像这样导入它们 header:
#import "NBPhoneNumberUtil.h"
#import "NBPhoneNumber.h"
我用来测试这个的程序写在下面。
创建一个新的Xcode项目
我为 Objective-C 使用了单视图应用程序模板。
创建 Podfile 并安装
播客文件:
source 'https://github.com/CocoaPods/Specs.git'
pod 'libPhoneNumber-iOS', '~> 0.8'
安装:
$ pod install
创建 Swift 文件
此时 Xcode 创建了桥接 header 文件。
我将导入添加到桥接 header 使用:
#import "NBPhoneNumberUtil.h"
#import "NBPhoneNumber.h"
在Swift文件中,我写了:
class Test {
func test() {
let util = NBPhoneNumberUtil()
}
}
项目编译无误
我现在解决了这个问题。问题是我在 Pod 文件中使用了 use_frameworks!
,所以路径不同。事实上,当您使用 use_frameworks!
时,您不需要桥接 header,并且必须直接在 swift 中导入文件。问题是我不知道如何导入它,但现在我知道了。
pod 文件:
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
platform :ios, '8.0'
target 'test' do
pod 'libPhoneNumber-iOS', '~> 0.8'
end
target 'testTests' do
end
在 Xcode 项目中,您不再需要桥接 header,只需在要使用它的地方导入库,如下所示:
import libPhoneNumber_iOS
现在它应该可以工作了。希望这对其他人有帮助。