gpt4 book ai didi

swift - 尝试修改表情符号序列时出现问题

转载 作者:行者123 更新时间:2023-11-28 06:33:55 25 4
gpt4 key购买 nike

我有以下函数,它接受一个带有表情符号的字符串,如果它是一个序列表情符号 a+b,它将保持 a 不变,并将 b 更改为不同的表情符号

func changeEmoji(givenString:String)->(String){

let emojiDictionary :[String:String] = [
"⛹" : "⛹",
"♀️" : "👩",
"🏻" : "💤",
"♂️" :"👨",
]

let stringCharacters=Array(givenString.characters)
var returnedString=String()

for character in stringCharacters{

if emojiDictionary[String(character)] == nil {
return "error"
}
else {
returnedString=returnedString+emojiDictionary[String(character)]!
}
}
return returnedString
}

我没问题

  changeEmoji(givenString: "⛹⛹🏻")

它输出:“⛹⛹💤”

但是:

 changeEmoji(givenString: "⛹⛹🏻⛹🏻‍♀️")

输出“错误”,但它不应该作为 ♀ Female Sign and Variation Selector-16 是我的 emojiDictionary 中的第二个键。男性标志和变体选择器出现类似问题。

知道为什么会这样吗?

最佳答案

问题是“⛹🏻‍♀️”由 3 个 Swift Character(又名扩展字素簇)组成:

  • “⛹🏻‍”(U+26F9 有球的人)

  • “🏻‍”(U+1F3FB 表情符号修饰符菲茨帕特里克类型 1-2,U+200D 零宽度连接器)

  • “♀️”(U+2640 女性符号,U+FE0F VARIATION SELECTOR-16)

但是,您的 emojiDictionary 只包含一个“🏻”(U+1F3FB Emoji Modifier Fitzpatrick Type-1-2),它与第二个 Character 不匹配“⛹🏻‍♀️”,因为它缺少零宽度连接符。

因此,最简单的解决方案是在您的字典中添加另一个键,以包含 Emoji Modifier Fitzpatrick Type-1-2 字符,并带有零宽度连接符后缀。最清楚的方法是在它后面加上 unicode 转义序列 \u{200D}

例如:

func changeEmoji(givenString: String) -> String? {

// I have included the unicode point breakdowns for clarity
let emojiDictionary : [String : String] = [
"⛹" : "⛹", // 26F9 : 26F9
"♀️" : "👩", // 2640, fe0f : 1f469
"🏻" : "💤", // 1f3fb : 1f4a4
"🏻\u{200D}" : "💤", // 1f3fb, 200d : 1f4a4
"♂️" :"👨" // 2642, fe0f : 1f468
]

// Convert characters of string to an array of string characters,
// given that you're just going to use the String(_:) initialiser later.
let stringCharacters = givenString.characters.map(String.init(_:))
var returnedString = ""

for character in stringCharacters {
guard let replacementCharacter = emojiDictionary[character] else {
// I would advise making your method return an optional
// in cases where the string can't be converted.
// Failure is shown by the return of nil, rather than some
// string sentinel.
return nil
}
returnedString += replacementCharacter
}
return returnedString
}

print(changeEmoji(givenString: "⛹⛹🏻⛹🏻‍♀️")) // Optional("⛹⛹💤⛹💤👩")

关于swift - 尝试修改表情符号序列时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39553386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com