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

问题描述

我有一个问题:

我正在检索由一些基本的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)
                }
            }
        
        
        } 

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

感谢您抽出一些时间来帮助我。

解决方法

快速错误不是很有帮助。那里的问题是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,encoding: .utf8) {
                print(pic)
            }
        }
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...