【问题标题】:How to convert from a Swift String Set to an Array如何从 Swift 字符串集转换为数组
【发布时间】:2016-01-05 17:02:42
【问题描述】:

我正在尝试从 Parse 检索的字符串对象创建单词数组。检索到的对象如下所示:

那么这行代码给出了这个。

let joinedWords = object["Words"] as! String

如何将joinedWords 转换为数组?

【问题讨论】:

    标签: arrays string swift parse-platform


    【解决方案1】:

    如果不关心顺序,可以在片场使用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()

    【讨论】:

    • 啊,没有。我需要获取joinedWords 字符串中的单词,而不是创建一个新集合。我该怎么做?
    • @richc 不清楚你在问什么。从您的屏幕截图看来,Words 是一组字符串(“testwords1”、“testwords2”、...)。你想用所有这些词创建一个字符串吗?
    • joinedWords 是一组格式为 { (testword1, testword2, testword3, testword4, testword5)} 的字符串。我需要将其转换为 ["testword1"、"testword2"、"testword3"、"testword4"、"testword5"] 形式的数组。订单暂时不重要。可以有任意数量的单词。
    • @richc 对,这就是我的回答。首先声明let joinedWords = object["Words"] as! Set&lt;String&gt;,然后像这样在joinedWords 上调用flatMapjoinedWords.flatMap { $0 } 将集合展平为一个数组。如果 object["Words"] 不是 Set,请通过打印 object["Words"].dynamicType 告诉我它是什么类型。
    • print(object["Words"].dynamicType) 在控制台中给出 ImplicitlyUnwrappedOptional 。将joinedWords 声明为Set 崩溃,无法将'__NSCFString' (0x1e68da4) 类型的值转换为'NSSet' (0x1e697e0)。
    【解决方案2】:

    非常感谢@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!
    

    【讨论】:

      猜你喜欢
      • 2014-11-07
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 2014-11-13
      • 2015-04-16
      相关资源
      最近更新 更多