如何解决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)
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。