diff --git a/Sources/SwiftPlus/Extensions/Character.swift b/Sources/SwiftPlus/Extensions/Character.swift index a7f1b86..a775762 100644 --- a/Sources/SwiftPlus/Extensions/Character.swift +++ b/Sources/SwiftPlus/Extensions/Character.swift @@ -9,6 +9,7 @@ import Foundation public extension Character { /// A simple emoji is one scalar and presented to the user as an Emoji + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var isSimpleEmoji: Bool { guard let firstScalar = unicodeScalars.first else { return false } @@ -16,9 +17,11 @@ public extension Character { } /// Checks if the scalars will be merged into an emoji + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var isCombinedIntoEmoji: Bool { unicodeScalars.count > 1 && unicodeScalars.first?.properties.isEmoji ?? false } + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var isEmoji: Bool { isSimpleEmoji || isCombinedIntoEmoji } } diff --git a/Sources/SwiftPlus/Extensions/String.swift b/Sources/SwiftPlus/Extensions/String.swift index 3414bac..a010b35 100644 --- a/Sources/SwiftPlus/Extensions/String.swift +++ b/Sources/SwiftPlus/Extensions/String.swift @@ -92,23 +92,29 @@ public extension String { } /// Returns true if `String` is only a single emoji + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var isSingleEmoji: Bool { count == 1 && containsEmoji } /// Returns true if `String` contains at least one emoji + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var containsEmoji: Bool { contains { $0.isEmoji } } /// Returns true if `String` contains only emojiĀ“s + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var containsOnlyEmoji: Bool { !isEmpty && !contains { !$0.isEmoji } } + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var emojiString: String { emojis.map { String($0) }.reduce("", +) } + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var emojis: [Character] { filter { $0.isEmoji } } + @available(macOS 10.12.2, *) @available(iOS 10.2, *) var emojiScalars: [UnicodeScalar] { filter { $0.isEmoji }.flatMap { $0.unicodeScalars } } }