我用一堆旧的 Objective-C 代码创建了一个 SPM 包(我想将一些旧代码“带有大桥接 header 的 Objective-C 代码”转换为“Objective -C 在一些 SPM 包中”)对于大多数情况,它工作正常,除了 Objective-C 类别,例如:
@import Foundation;
@interface NSURL (Additions)
@property (copy, readonly) NSDictionary<NSString *, NSString *> *queryParams;
@end
问题: 属性 queryParams
在 Swift 中不适用于 URL
类型,而仅适用于 NSURL
类型。这对我来说看起来很奇怪,因为当在应用程序中声明相同的类别并使用桥接头文件时,queryParams
也可以从 URL
类型使用。
Tests/URLUtilsTests/URLUtilsTestsSwift.swift:18:31: error: value of type 'URL' has no member 'queryParams'
let queryParams = url.queryParams
~~~ ^~~~~~~~~~~
error: fatalError
问题:使用 SPM 时,我需要在 NSURL 和 URL 中包含 queryParams
什么?
我创建了一个repo in GitHub with reproducing problem
这是我的整个包的屏幕截图:
最佳答案
一种可能的解决方案是创建扩展来处理基于 Objective-C 等效项的 Swift 类型上不存在的属性。
在您的测试中包含 .swift 扩展名:
// URL+QueryParams.swift
import Foundation
extension URL {
var queryParams: [String: String] {
var urlDict = [String: String]()
guard let query = self.query else { return urlDict }
let subArray = query.components(separatedBy: "&")
for element in subArray {
let urlArray = element.components(separatedBy: "=")
if urlArray.count < 2 { continue }
urlDict[urlArray[0]] = urlArray[1]
}
return urlDict
}
}
关于swift - 具有 Objective-C NSURL 类别的 SPM 库未导入到 Swift URL 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76201998/