【发布时间】:2020-04-13 18:33:23
【问题描述】:
我正在实现一个 MacOS 服务插件,但偶然发现了一个我无法解决的 Swift/ObjC 交互。在 ObjC 中,调用 Service 方法的签名是这样的:
- (void) translateService:(NSPasteboard *)pboard userData:(NSString *)userData error:(NSString **)error
我能够构建并运行一个等效的 Swift,但我不知道如何处理 (NSString **) 错误。我已经尝试过AutoreleasingUnsafeMutablePointer<NSString?>?,但是当我尝试将 NSString 分配给错误参数时,我收到了来自编译器的抱怨:“无法分配给值:'error' 是 'let' 常量”。这是我所拥有的(我确定这是不对的)
@objc func translateService( _ pboard: NSPasteboard, userData: String, error: AutoreleasingUnsafeMutablePointer <NSString?>?) {
if let types = pboard.types {
if !types.contains(NSPasteboard.PasteboardType.string) {
//TODO: Error
error = NSString("Does not contain String data")
return
}
你如何在 Swift 中模仿这个功能?如何在该参数中返回错误字符串?
【问题讨论】:
-
那是我最初徘徊的路径,但它不是签名中的 NSError**/NSErrorPointer,它是一个 NSString**,我不认为 自动桥接到 NSError** 并因此抛出功能。我认为我只是应该在其中填充一个字符串,但我对 API 的了解还不够充分,无法确定
标签: objective-c swift pointers parameters