Arrays 如何将Swift字符串集转换为数组
我正试图从从解析中检索的字符串对象创建一个单词数组。检索到的对象如下所示: 然后这行代码给出了这个Arrays 如何将Swift字符串集转换为数组,arrays,string,swift,parse-platform,Arrays,String,Swift,Parse Platform,我正试图从从解析中检索的字符串对象创建一个单词数组。检索到的对象如下所示: 然后这行代码给出了这个 let joinedWords = object["Words"] as! String 如何将连接词转换为数组?如果您不关心顺序,可以在集合上使用flatMap: var mySet = Set<String>() for index in 1...5 { mySet.insert("testwords\(index)") } let myArray = mySet
let joinedWords = object["Words"] as! String
如何将连接词转换为数组?如果您不关心顺序,可以在集合上使用
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"]"
如果object[“Words”]
是AnyObject
,则必须将其展开
if let joinedWordsSet = object["Words"] as? Set<String> {
var joinedWordsArray = joinedWordsSet.flatMap { $0 }
myArray.sortInPlace()
print(myArray)
}
如果让joinedWordsSet=object[“Words”]as?设置{
var joinedWordsArray=joinedWordsSet.flatMap{$0}
myArray.sortInPlace()文件
打印(myArray)
}
Swift 3注意:
sortInPlace()
已重命名为sort()
如果您不关心顺序,您可以在集合上使用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"]"
如果object[“Words”]
是AnyObject
,则必须将其展开
if let joinedWordsSet = object["Words"] as? Set<String> {
var joinedWordsArray = joinedWordsSet.flatMap { $0 }
myArray.sortInPlace()
print(myArray)
}
如果让joinedWordsSet=object[“Words”]as?设置{
var joinedWordsArray=joinedWordsSet.flatMap{$0}
myArray.sortInPlace()文件
打印(myArray)
}
Swift 3注意:
sortInPlace()
已重命名为sort()
非常感谢@JAL花了这么多时间在聊天中解决了这个问题。这就是我们想到的。这是个预兆,毫无疑问还有更好的办法
上载以解析时,请将集合另存为数组
let wordsSet = (wordList?.words?.valueForKey("wordName"))! as! NSSet
let wordsArray = Array(wordsSet)
然后它保存起来进行解析——看起来像一个集合,而不是一个数组或字典
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!
非常感谢@JAL花了这么多时间聊天来解决这个问题。这就是我们想到的。这是个预兆,毫无疑问还有更好的办法 上载以解析时,请将集合另存为数组
let wordsSet = (wordList?.words?.valueForKey("wordName"))! as! NSSet
let wordsArray = Array(wordsSet)
然后它保存起来进行解析——看起来像一个集合,而不是一个数组或字典
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!
啊,没有。我需要获取joinedWords字符串中的单词,而不是创建一个新的集合。我该怎么做?@richc不清楚你在问什么。从您的屏幕截图来看,
Words
是一组字符串(“testwords1”、“testwords2”和…)。您正在尝试使用所有这些单词创建字符串吗?joinedWords是一组字符串,格式为{(testword1、testword2、testword3、testword4、testword5)}。我需要将其转换为一个数组,格式为[“testword1”、“testword2”、“testword3”、“testword4”、“testword5”]。现在秩序并不重要。可以有任意数量的单词。@richc对,这就是我的答案。首先将joinedWords=object[“Words”]声明为!设置,然后调用joinedWords
上的flatMap
,如下所示:joinedWords.flatMap{$0}
将集合展平为一个数组。如果object[“Words”]
不是一个集合,请通过打印object[“Words”]来告诉我它是什么类型。dynamicType
.print(object[“Words”].dynamicType)在控制台中隐式提供了Unwrappedoptional。将joinedWords声明为集合会崩溃,无法将类型为“\uu NSCFString”(0x1e68da4)的值强制转换为“NSSet”(0x1e697e0)。啊,没有。我需要获取joinedWords字符串中的单词,而不是创建一个新的集合。我该怎么做?@richc不清楚你在问什么。从您的屏幕截图来看,Words
是一组字符串(“testwords1”、“testwords2”和…)。您正在尝试使用所有这些单词创建字符串吗?joinedWords是一组字符串,格式为{(testword1、testword2、testword3、testword4、testword5)}。我需要将其转换为一个数组,格式为[“testword1”、“testword2”、“testword3”、“testword4”、“testword5”]。现在秩序并不重要。可以有任意数量的单词。@richc对,这就是我的答案。首先将joinedWords=object[“Words”]声明为!设置,然后调用joinedWords
上的flatMap
,如下所示:joinedWords.flatMap{$0}
将集合展平为一个数组。如果object[“Words”]
不是一个集合,请通过打印object[“Words”]来告诉我它是什么类型。dynamicType
.print(object[“Words”].dynamicType)在控制台中隐式提供了Unwrappedoptional。将joinedWords声明为集合时崩溃,无法将类型为“\uu NSCFString”(0x1e68da4)的值强制转换为“NSSet”(0x1e697e0)。