我有一个问题:
我正在取回一根由一些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)
}
}
}
}