swift - 无法从包含多个扩展字素簇的字符串中形成字符
问题描述
在构建刽子手应用程序时,我尝试制作一种可以接受单击字母的方法,将其放入一个 tappedLetter 数组中,然后检查它是否包含在要查找的单词中,以及该字母是否应该放在我们当前尝试的单词中的位置制作。
用户要查找的单词显示为“?” 而不是它的字母,所以当用户点击右字母对应的“?” 替换为那个字母
当我单击字母应用程序崩溃时出现问题。方法有问题,我不知道我是否以正确的方式解决这个问题,只使用一种方法来替换“?” 单击时带有字母
class ViewController: UIViewController {
var points : UILabel!
var letterButton = [UIButton]()
var currentWord : UITextField!
var wrong : UILabel!
var score = 0
var mistake = 0
var activatedButton = [UIButton]()
var word = ""
var usedLetter = ""
var promptWord = ""
var tappedLetter = [Character]()
我将跳过我制作 NSLayoutConstraint 和 addSubview 的部分
@objc func touchedButton(_ sender:UIButton){
guard let letter = sender.titleLabel?.text else {return}
tappedLetter.append(contentsOf: letter.lowercased())
print("U clicked on: \(tappedLetter)")
activatedButton.append(sender)
sender.isHidden = true
sender.isUserInteractionEnabled = false
if tappedLetter.contains(Character(usedLetter)){ //Error:Thread 1: Fatal error: Can't form a Character from a String containing more than one extended grapheme cluster
let char = Character(usedLetter)
for letter in word{
if letter == char{
if let position = word.firstIndex(of: letter){
promptWord.remove(at: position)
promptWord.insert(letter, at: position)
}
}
}
}
}
func loadlevel(){
if let startWordUrl = Bundle.main.url(forResource: "start", withExtension: "txt"){
if let startWord = try? String(contentsOf: startWordUrl){
var allWords = startWord.components(separatedBy: "\n")
word = allWords.randomElement()!
for letter in word {
usedLetter.append(Character(extendedGraphemeClusterLiteral: letter))
promptWord.append("?")
}
currentWord.text = promptWord
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
loadlevel()
}
解决方案
您正在尝试将字符串转换为单个字符。我认为您要检查的是字符串 usedLetters 包含按钮中的字符。尝试这个
if usedLetter.contains(Character(letter)) {
代替
if tappedLetter.contains(Character(usedLetter)){
同样的事情
let char = Character(/* usedLetter is a full string of characters */)
let char = Character(letter)
推荐阅读
- css - 如何使使用 flexbox 的容器的子级保持在同一行并且每个容器的大小相同?
- git - Jenkins Docker 从节点未能在管道中调用结帐
- typescript - 元组元素的打字稿类型预测
- android - 如何从 Android 应用程序设置 Google SIP 的 SHIFT 状态
- python - 使用 Python xlswriter 将自定义字符串标签添加到 Excel 散点图
- javascript - JEST 全局变量未按预期更新
- java - Java 在类路径中看不到 JAR 文件
- html - 如何添加 AngularJS DHTML 指令?
- amazon-web-services - 在 s3 的上下文中,非双栈是什么意思?
- regex - 尖括号内的正则表达式换行匹配