美文网首页iOS高手iOS开发
Swift 判断字符串的emoji表情

Swift 判断字符串的emoji表情

作者: 见哥哥长高了 | 来源:发表于2019-12-22 14:57 被阅读0次

    extension Character

    extension Character {
        
        //简单的emoji是一个标量 以emoji的形式呈现给用户
        var isSimpleEmoji: Bool {
            guard let firstProperties = unicodeScalars.first.properties else {
                return false
            }
            return unicodeScalars.count == 1 && (firstProperties.isEmojiPresentation || firstProperties.generalCategory ==.otherSymbol)
        }
    
        //检测标量是否将合并到emoji中
        var isCombineIntoEmoji: Bool{
            return unicodeScalars.count > 1 && unicodeScalars.contains{$0.properties.isJoinControl || $0.properties.isVariationSelector}
        }
        
        //属否为emoji表情
        var isEmoji: Bool {
            return isSimpleEmoji || isCombineIntoEmoji
        }
    }
    

    extension String

    extension String {
        
        //是否为单个emoji表情
        var isSingleEmoji: Bool {
            return count == 1 && containsEmoj
        }
        
        //是否包含emoji表情
        var containsEmoji: Bool {
            return contains{$0.isEmoji}
        }
        
        //只包含emoji表情
        var containsOnlyEmoji: Bool {
            return !isEmpty && !contains{!$0.isEmoji}
        }
        
        //提取emoji表情字符串
        var emojiString: String {
            return emojis.map{ String($0) }.reduce("",+)
        }
        
        //获取emoji表情数组
        var emojis: [Character] {
            return filter{$0.isEmoji}
        }
        
        //提取单元编码标量
        var emojiScallars: [UnicodeScalar] {
            return filter{$0.isEmoji}.flatMap{ $0.unicodeScalars}
        }
        
    }
    

    使用举例

    "A̛͚̖".containsEmoji // false
    "3".containsEmoji // false
    "A̛͚̖▶️".unicodeScalars // [65, 795, 858, 790, 9654, 65039]
    "A̛͚̖▶️".emojiScalars // [9654, 65039]
    "3️⃣".isSingleEmoji // true
    "3️⃣".emojiScalars // [51, 65039, 8419]
    "👌🏿".isSingleEmoji // true
    "🙎🏼‍♂️".isSingleEmoji // true
    "👨‍👩‍👧‍👧".isSingleEmoji // true
    "👨‍👩‍👧‍👧".containsOnlyEmoji // true
    "Hello 👨‍👩‍👧‍👧".containsOnlyEmoji // false
    "Hello 👨‍👩‍👧‍👧".containsEmoji // true
    "👫 Héllo 👨‍👩‍👧‍👧".emojiString // "👫👨‍👩‍👧‍👧"
    "👨‍👩‍👧‍👧".count // 1
    "👫 Héllœ 👨‍👩‍👧‍👧".emojiScalars // [128107, 128104, 8205, 128105, 8205, 128103, 8205, 128103]
    "👫 Héllœ 👨‍👩‍👧‍👧".emojis // ["👫", "👨‍👩‍👧‍👧"]
    "👫 Héllœ 👨‍👩‍👧‍👧".emojis.count // 2
    "👫👨‍👩‍👧‍👧👨‍👨‍👦".isSingleEmoji // false
    "👫👨‍👩‍👧‍👧👨‍👨‍👦".containsOnlyEmoji // true
    

    相关文章

      网友评论

        本文标题:Swift 判断字符串的emoji表情

        本文链接:https://www.haomeiwen.com/subject/qhyonctx.html