Swift 4:表达式类型不明确,循环内没有更多上下文

Swift 4: Type of expression is ambiguous without more context inside loop

我有一个问题:

我正在检索一个长字符串,该字符串由一些以“;”连接在一起的 base 64 字符串组成在所述字符串中将它们中的每一个分开。

这是我的代码:

   if(item.photo != "null"){
            let b64fullstring = item.photo
            if(b64fullstring!.contains(";")){
                let photos = b64fullstring!.split(separator: ";")
                
                for pic in photos{
                    let base64encodedstring = pic
                    let decodedData = Data(base64Encoded: base64encodedstring!, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)!
                    let decodedString = String(data: decodedData, encoding: .utf8)!
                    print(pic)
                }
            }
        
        
        } 

“数据”函数出现以下错误; 没有更多上下文,表达式类型不明确 我真的不明白。 在单个字符串上工作时,它工作得很好。但是当使用循环时,出于某种原因它会给出此消息。

感谢您抽出宝贵时间帮助我。

Swift 错误不是很有帮助。问题是 split 方法 returns 一个子字符串数组:

func split(separator: Character, maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true) -> [Substring]

并且数据初始值设定项需要一个字符串:

init?(base64Encoded base64String: String, options: Data.Base64DecodingOptions = [])

您只需要从您的子字符串初始化一个新字符串:

if let photos = b64fullstring?.split(separator: ";") {
    for pic in photos {
        if let decodedData = Data(base64Encoded: String(pic), options: .ignoreUnknownCharacters) {
            if let decodedString = String(data: decodedData, encoding: .utf8) {
                print(pic)
            }
        }
    }
}

另一种选择是使用 components(separatedBy:) 方法,其中 returns 一个字符串数组而不是子字符串:

func components<T>(separatedBy separator: T) -> [String] where T : StringProtocol

if let photos = b64fullstring?.components(separatedBy: ";") {
    for pic in photos {
        if let decodedData = Data(base64Encoded: pic, options: .ignoreUnknownCharacters) {
            if let decodedString = String(data: decodedData, encoding: .utf8) {
                print(pic)
            }
        }
    }
}