【问题标题】:Swift Convert A String-As-An-Array, To An Array Of StringsSwift 将字符串作为数组转换为字符串数组
【发布时间】:2016-04-20 00:34:40
【问题描述】:

我有一个字符串:

"["word1","word2"]"

我想要一种简单的方法将其转换为实际的[String]

我能找到的所有其他问题都是关于将 int 字符串转换为数组。

我试过了

Array(arrayLiteral: "["word1","word2"]")

但我明白了

["[\"word1\",\"word2\"]"]

手动清理边缘并删除斜线似乎我做错了什么。

我很好奇是否有一种简单的方法可以将字符串数组作为字符串转换为字符串数组。

即将"["word1","word2"]" 转换为["word1","word2"]

解决方案(感谢@Eric D)

    let data = stringArrayString.dataUsingEncoding(NSUTF8StringEncoding)

    var stringsArray:[String]!

    do
    {
        stringsArray = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String]
    } catch
    {
        print()
    }

    print("Array is \(stringsArray)")

【问题讨论】:

  • 字符串来自哪里?
  • 我的应用使用了 Cordova,所以这是一个来自 Javascript 接口的命令。
  • 看起来 JSON 尝试使用 SwiftyJSON 来解析它
  • @LeoDabus 我可以使用 SwiftyJSON,但我很好奇 swift 中是否有一种快速方法,我可以从格式化为数组的字符串直接移动到字符串数组
  • 据我所知,Foundation 中内置了一些东西,但 Swift 标准库中没有内置。

标签: arrays string swift


【解决方案1】:

将您的“字符串数组”编码为数据,然后将此数据作为 JSON 解码为 Swift 数组。

像这样,例如:

let source = "[\"word1\",\"word2\"]"

guard let data = source.dataUsingEncoding(NSUTF8StringEncoding),
    arrayOfStrings = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String] else {
        fatalError()
}

print(arrayOfStrings)  // ["word1", "word2"]
print(arrayOfStrings[1])  // "word2"

【讨论】:

  • 有趣我以前没见过这种语法!你能说出guard let data = source.dataUsingEncoding(NSUTF8StringEncoding), arrayOfStrings = try NSJSONSerialization.JSONObjectWithData(data, options: []) 叫什么名字吗?我想了解一下这个
  • 它被称为“保护声明”,您可以在此处阅读:developer.apple.com/library/ios/documentation/Swift/Conceptual/… 在“控制流”的“提前退出”部分。它是if let 的替代品,可让您在当前范围内使用展开的值。这很方便。 :)
  • 非常酷!可能想要更新您的答案以包含问题;)。
【解决方案2】:

同意上面的 cmets,我可能会使用 JSON 解析器。做不到这一点(或者如果你不能因为某种原因),我不知道任何内置的方式;你必须手动完成。我会做类似的事情:

extension String {
    func stringByTrimmingFirstAndLast() -> String {
        let startIndex = self.startIndex.successor()
        let endIndex = self.endIndex.predecessor()
        return self.substringWithRange( startIndex..<endIndex )
    }
}

let str = "[\"word1\",\"word2\"]"
let array = str
    .stringByTrimmingFirstAndLast()
    .componentsSeparatedByString(",")
    .map { string in
        return string.stringByTrimmingFirstAndLast()
    }

【讨论】:

    猜你喜欢
    • 2016-11-20
    • 2014-11-13
    • 1970-01-01
    • 2015-10-11
    • 2017-11-27
    • 2016-01-27
    • 2016-06-07
    相关资源
    最近更新 更多