我想在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()
}()
答案 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()!)!)