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)。