【问题标题】:Cannot convert type 'Void' to 'String' in coercion in Swift无法在 Swift 中强制将类型“Void”转换为“String”
【发布时间】:2019-04-23 21:17:15
【问题描述】:

所以我使用了一些库和其中一种方法,据说有返回值

let data2 = dataCollector.collectCardFraudData({ ( str:String) in })

但问题是返回值是 void 类型,但我可以看到其中存在的值,我检查了很多教程,他们建议更改返回类型,但由于这是一个库,我不认为我可以这样做。有没有其他方法可以将该值转换为字符串??

我也是一个新的 Swift,所以请任何输入都会有帮助

谢谢

【问题讨论】:

  • 请添加collectCardFraudData的声明行
  • - (void)collectCardFraudData:(void (^)(NSString *deviceData))completion;
  • 不确定这是否有帮助
  • @Sam collectCardFraudData 不是返回任何值。这是一个编译块。如果在块内得到一个字符串

标签: ios swift braintree braintree-sandbox braintree-data


【解决方案1】:

函数没有返回值。 Swift 等价物是

func collectCardFraudData(completion: @escaping (String) -> Void)

所以你必须使用下面的语法来调用它。 deviceData 作为参数传递,完成后您必须调用 completion

dataCollector.collectCardFraudData { deviceData in 

  // do something with deviceData
  completion()
}

【讨论】:

    【解决方案2】:

    我知道的不多。只是猜测。您的函数正在通过完成处理程序返回值。你应该这样使用它

    let data2 = dataCollector.collectCardFraudData({ str in
        print(str) // str available here
    })
    

    【讨论】:

      【解决方案3】:

      由于 collectCardFraudData 有一个闭包,它在该块内为您提供“str”值,直接将其分配给“data2”会导致您出错。

      试试下面的代码,如果可行,请告诉我

      var data2 = String()
      dataCollector.collectCardFraudData({ str in 
          data2 = "\(str)"
      })
      

      谢谢

      【讨论】:

      • 1. collectCardFraudData 可能是异步函数,这段代码不起作用; 2."\(str)"——为什么? str已经是String了,为什么还要插入到String中?
      猜你喜欢
      • 2013-02-22
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      相关资源
      最近更新 更多