【问题标题】:NSString** as a swift function parameterNSString** 作为 swift 函数参数
【发布时间】: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 中模仿这个功能?如何在该参数中返回错误字符串?

【问题讨论】:

  • 也许这会有所帮助:stackoverflow.com/questions/34786115/…
  • 那是我最初徘徊的路径,但它不是签名中的 NSError**/NSErrorPointer,它是一个 NSString**,我不认为 自动桥接到 NSError** 并因此抛出功能。我认为我只是应该在其中填充一个字符串,但我对 API 的了解还不够充分,无法确定

标签: objective-c swift pointers parameters


【解决方案1】:

我想我可能已经找到了答案。如果我错了,请纠正我。

@objc func translateService( _  pboard:  NSPasteboard, userData: String,  error: AutoreleasingUnsafeMutablePointer<NSString?>?)  {

    if let types = pboard.types {            
        if !types.contains(NSPasteboard.PasteboardType.string) {

            error?.pointee = NSString("Does not contain String data")

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多