Показать случайные эмодзи внутри метки в tableViewCell - PullRequest
0 голосов
/ 24 августа 2018

Я хочу иметь случайные эмодзи внутри метки, и каждая таблица ViewCell должна показывать разные, случайно выбранные эмодзи ... Я попробовал следующую функцию, но, к сожалению, она дает мне следующую ошибку: Значение типа '[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 голосов
/ 22 июля 2019
po String(UnicodeScalar(Array(0x1F300...0x1F3F0).randomElement()!)!)
0 голосов
/ 24 августа 2018

Если вы не используете Swift 4.2, shuffled() недоступен и появляется сообщение об ошибке.

Вы можете создать свою собственную функцию shuffled().

0 голосов
/ 24 августа 2018

Как говорит Карпсен, функция 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)
}

Таким образом, вы создадите структуру для хранения всех данных для ячейки табличного представления, а затем заполните каждую структуру вызовом * 1011.*.

0 голосов
/ 24 августа 2018

Вы можете легко использовать это 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 и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...