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

标签 swift foreach base64 decode ambiguous

我有一个问题:

我正在检索一个长字符串,该字符串由一些以“;”连接在一起的 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 方法返回一个子字符串数组:

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:) 方法,它返回一个字符串数组而不是子字符串:

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)
            }
        }
    }
}

关于 swift 4 : Type of expression is ambiguous without more context inside loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63974959/

相关文章:

javascript - 是否存在 JavaScript 的 forEach 可以工作而 for 循环却不能工作的情况?

android - 如何在不使用外部库的情况下在 Jetpack Compose 中显示 base64 编码的图像

java - 将 Java 方法 Base64.encodeToString() 转换为 PHP

ios - 如何在 iPhone 上以编程方式在 Swift 中将 UIViewController 呈现为弹出窗口

swift - 设置了 UITextView contentOffset

ios - 如何访问委托(delegate)函数中的变量?

php - 警告 : Invalid argument supplied for foreach() in C:\wamp\www\social\includes\class-query. php 第 145 行

swift - 重置和更改 SKActions 的速度

PHP CodeIgniter Foreach 返回不正确的数据

javascript - 如何使用 canvas.toDataURL() 在 Adob​​e AIR 中获取图像的 base64?