gpt4 book ai didi

swift - 无法将类型 'Int' 的值转换为预期的参数类型 '[CChar]'(又名 'Array')

转载 作者:行者123 更新时间:2023-11-28 11:57:19 24 4
gpt4 key购买 nike

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

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

Cannot convert value of type 'Int' to expected argument type '[CChar]' (aka Array)

最佳答案

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

然后出于某种原因,您试图从生成的 [CChar] 创建一个 Int8。这行不通,因此您需要解释为什么要尝试这样做。

另一个考虑因素是您的输入参数是可选的,返回值也是可选的。也许如果 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
}

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

此时,cstr 的类型为[CChar]

关于swift - 无法将类型 'Int' 的值转换为预期的参数类型 '[CChar]'(又名 'Array<Int8>'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50733004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com