【发布时间】:2016-01-05 17:02:42
【问题描述】:
我正在尝试从 Parse 检索的字符串对象创建单词数组。检索到的对象如下所示:
那么这行代码给出了这个。
let joinedWords = object["Words"] as! String
如何将joinedWords 转换为数组?
【问题讨论】:
标签: arrays string swift parse-platform
我正在尝试从 Parse 检索的字符串对象创建单词数组。检索到的对象如下所示:
那么这行代码给出了这个。
let joinedWords = object["Words"] as! String
如何将joinedWords 转换为数组?
【问题讨论】:
标签: arrays string swift parse-platform
如果不关心顺序,可以在片场使用flatMap:
var mySet = Set<String>()
for index in 1...5 {
mySet.insert("testwords\(index)")
}
let myArray = mySet.flatMap { $0 }
print(myArray) // "["testwords5", "testwords3", "testwords4", "testwords2", "testwords1"]"
如果您希望列表按字母顺序排序,您可以将数组设为 var 并使用 sortInPlace()
var myArray = mySet.flatMap { $0 }
myArray.sortInPlace()
print(myArray) // "["testwords1", "testwords2", "testwords3", "testwords4", "testwords5"]"
如果object["Words"] 是AnyObject,则必须解包。
if let joinedWordsSet = object["Words"] as? Set<String> {
var joinedWordsArray = joinedWordsSet.flatMap { $0 }
myArray.sortInPlace()
print(myArray)
}
Swift 3 注意:sortInPlace() 已重命名为 sort()。
【讨论】:
Words 是一组字符串(“testwords1”、“testwords2”、...)。你想用所有这些词创建一个字符串吗?
let joinedWords = object["Words"] as! Set<String>,然后像这样在joinedWords 上调用flatMap:joinedWords.flatMap { $0 } 将集合展平为一个数组。如果 object["Words"] 不是 Set,请通过打印 object["Words"].dynamicType 告诉我它是什么类型。
非常感谢@JAL 花了这么多时间聊天来解决这个问题。这就是我们想出的。它是一个障碍,毫无疑问有更好的方法!
上传到 Parse 时,将集合保存为数组。
let wordsSet = (wordList?.words?.valueForKey("wordName"))! as! NSSet
let wordsArray = Array(wordsSet)
然后它保存到 Parse - 看起来像一个集合,而不是数组或字典。
let parseWordList = PFObject(className: "WordList")
parseWordList.setObject("\(wordsArray)", forKey: "Words")
parseWordList.saveInBackgroundWithBlock { (succeeded, error) -> Void in
if succeeded {
// Do something
} else {
print("Error: \(error) \(error?.userInfo)")
}
}
然后,您可以在从 Parse 下载字符串时将 [ ] 从字符串中删除,然后删除 ,并添加一些“”,瞧,有一个可以使用的数组,例如添加到 CoreData。
var joinedWords = object["Words"] as! String
joinedWords = String(joinedWords.characters.dropFirst())
joinedWords = String(joinedWords.characters.dropLast())
let joinedWordsArray = joinedWords.characters.split() {$0 == ","}.map{ String($0) } // Thanks @JAL!
【讨论】: