在tableViewCell的Label中显示随机表情符号

时间:2018-08-24 15:08:35

标签: ios swift uitableview

我想在Label中有一个随机表情符号,每个tableViewCell应该显示一个不同的,随机选择的表情符号... 我尝试了以下函数,但可悲的是它给了我以下错误:类型[[String]'的值没有成员'shuffled'

let emojis: [String] = {
    let url = Bundle.main.url(forResource: "emojis", withExtension: "txt")!
    let list = try! String(contentsOf: url).map { String($0) }
    return list.shuffled()
}()

4 个答案:

答案 0 :(得分:1)

您可以轻松地将此extension用于表情符号字符串:)

extension NSObject {

    public var emojiString: String {
        let pointer = Unmanaged.passUnretained(self).toOpaque()
        // You can adjust your range
        //let range = 0x1F600...0x1F64F
        let range = 0x1F300...0x1F3F0
        let index = (pointer.hashValue % range.count)
        let ord = range.lowerBound + index
        guard let scalar = UnicodeScalar(ord) else { return "❓" }
        return String(scalar)
    }

}

只需致电cell.textLabel?.text = cell.emojiString,您就可以使用了。

答案 1 :(得分:0)

除非您使用的是Swift 4.2,否则shuffled()不可用,并且出现错误消息。

您可以创建自己的shuffled()函数。

答案 2 :(得分:0)

正如Carpsen所说,shuffled()函数仅在Swift≤4.2中使用。在早期版本的语言中,您必须编写自己的语言。

这是一个示例实现。我给scrambled()打电话了,所以它可以在Swift的任何版本中使用,包括4.2:

extension Array {
    func scrambled () -> [Element] {
        var source = self
        var dest = Array<Element>()
        for _ in 1...self.count {
            let index = Int(arc4random_uniform(UInt32(source.count)))
            dest.append(source.remove(at: index))
        }
        return dest
    }
}

您可以加扰整个表情符号集,但是在我看来,当您第一次填充表格视图的数据源时,最好创建一个随机表情符号数组。为此,您可以使用函数randomEmoji()

func randomEmoji() -> String {
    let range = 0x1F300...0x1F3F0
    let index = Int(arc4random_uniform(UInt32(range.count)))
    let ord = range.lowerBound + index
    guard let scalar = UnicodeScalar(ord) else { return "❓" }
    return String(scalar)
}

因此,您将创建一个结构来保存表视图单元格的所有数据,然后使用对randomEmoji()的调用填充每个结构。

答案 3 :(得分:0)

po String(UnicodeScalar(Array(0x1F300...0x1F3F0).randomElement()!)!)