Проблема в 0
после ??
.Выражение input?.cString(using: .utf8)
возвращает [CChar]?
, поэтому при использовании ??
для предоставления значения по умолчанию, если результат равен nil
, необходимо указать значение того же типа.Вам нужно [CChar]
, но вы передаете 0
, что, конечно, Int
.
Затем по какой-то причине вы пытаетесь создать Int8
из полученного [CChar]
.Это не сработает, поэтому вам нужно объяснить, почему вы пытаетесь это сделать.
Другое соображение состоит в том, что ваш параметр input
является необязательным, а возвращаемое значение - необязательным.Возможно, если input
равно nil
, вам следует просто вернуть 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
}
guard
просто возвращает nil
если input
равно nil
.После guard
есть локальная переменная с именем input
, которая не является обязательной, поэтому вы можете напрямую получить ее значение cString
.Можно принудительно развернуть результат cString
, потому что вы никогда не получите nil
с кодировкой .utf8
.
На данный момент cstr
имеет тип [CChar]
.