【问题标题】:Cannot convert value of type 'subSequence' (aka 'String.CharacterView') to type 'String' in collection无法将类型“subSequence”(又名“String.CharacterView”)的值转换为集合中的“String”类型
【发布时间】:2017-10-20 01:54:58
【问题描述】:

我构建了一个从数据库请求图像 url 的 webservis。我想在 swift 上展示它。但是我在 var photo 行上遇到了这个错误:

无法将“subSequence”(又名“String.CharacterView”)类型的值转换为集合中的“String”类型

let requestResponse = self.sendToServer(postUrl: "localhost",data:"abc")

let Seperated = requestResponse.characters.split(separator: " ")

var photo = Seperated[0] as String

let imageURL = URL(string: photo)
if let imageData = try? Data(contentsOf: imageURL!) {
    ...
}

【问题讨论】:

  • let photo = String(Seperated.first ?? "")
  • 字符的split方法返回一个String CharacterView SubSequences数组。您需要用其中一个初始化一个新字符串

标签: swift string


【解决方案1】:

考虑这样的事情:

let requestResponse = "some string"
let separated = requestResponse.characters.split(separator: " ")

if let some = separated.first {
    let value = String(some)

    // Output: "some"
}

【讨论】:

【解决方案2】:

最简单的解决方案。

let separated = requestResponse.characters.split(separator: " ").map { String($0) }

【讨论】:

  • 我花了一段时间才明白为什么这是必要的,但这是因为 split 返回一个“子字符串”对象而不是字符串。它是相似的,但是出于速度原因,如果您修改一个子字符串,它会从原始字符串修改,因此它的内存效率更高。因此,map 所做的是将每个“子字符串”转换为实际的字符串,这对于很多函数都是必需的。希望这有助于其他人理解为什么这更有效。
【解决方案3】:

如果 swift 4 你这样使用:

let separated = requestResponse.split(separator: " ")
var photo = String(separated.first ?? "")

【讨论】:

    【解决方案4】:

    split 返回Substrings 的列表,因此我们必须将它们映射(转换)为Strings。为此,您只需将Substring 传递给Strings init 函数:

    let separated = requestResponse.characters.split(separator: " ").map(String.init)
    

    【讨论】:

    • swift 不是一种糟糕的语言,但它确实让许多简单的事情令人沮丧
    • @javadba 必须同意,伙计! :D
    • Swift 的紧凑类型非常棒,因为它防止了 Objective-C 完全松散所允许的许多错误。然而,有时它确实会让人非常沮丧(让我强迫你这样做 - 啊!)。
    【解决方案5】:

    一种使用高阶函数从字符串拆分中获取字符串的方法:

    let splitStringArray = requestResponse.split(separator: " ").map({ (substring) in
        return String(substring)
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多