无法转换类型&#39; Int&#39;预期的论证类型&#39; [CChar]&#39; (又名&#39;数组<int8>&#39;)

时间:2018-06-07 04:32:33

标签: swift char int

当我迁移到Swift时,我将Objective-C片段转换为Swift。我还是Objective-C的新手,我对Swift有一般的了解。有问题满足参数C char尝试从Int8转换为C Char。

class func computeSHA256Digest(for input: String?) -> String? {
    let cstr = Int8(input?.cString(using: .utf8) ?? 0)
    /* the rest of code */
}
  

无法转换类型&#39; Int&#39;预期的论证类型&#39; [CChar]&#39; (又名数组)

1 个答案:

答案 0 :(得分:2)

问题是0之后的??。表达式input?.cString(using: .utf8)返回[CChar]?,因此如果结果为??,则使用nil提供默认值时,需要提供相同类型的值。您需要[CChar],但是您传递0,当然是Int

然后由于某种原因,您尝试从生成的Int8创建[CChar]。那不行,所以你需要解释为什么要这样做。

另一个考虑因素是您的input参数是可选的,返回值是可选的。如果inputnil,您应该返回nil

我会将您发布的代码更改为:

class func computeSHA256Digest(for input: String?) -> String? {
    guard let input = input else { return nil }

    let cstr = input.cString(using: .utf8)!

    // The rest of the code
}

如果guardnilinput只会返回nil。在guard之后,有一个名为input的局部变量不是可选的,因此您可以直接获取其cString值。强制解包cString的结果是安全的,因为您永远不会使用nil编码获得.utf8

此时,cstr的类型为[CChar]