键盘功能问题



我在执行代码的键盘上的回车键时遇到一些问题。我过去尝试过,以下代码运行良好:

func textFieldShouldReturn(textField: UITextField) -> Bool{
    textField.resignFirstResponder()
    valueOfLetter()
    return true;
}

但是,由于某种原因,行valueOfLetter上存在错误。

这是整个文件,以备不时之需:

class ViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
@IBOutlet weak var strWordValue: UILabel!
@IBOutlet weak var strInputField: UITextField!

func textFieldShouldReturn(textField: UITextField) -> Bool{
    textField.resignFirstResponder()
    valueOfLetter()
    return true;
}
 var TextField: UITextField!
    func valueOfLetter(inputLetter: String) -> Int {
        let alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
        for (index, letter) in alphabet {
            if letter = inputLetter.lowercaseString {
                return index + 1
                for character in word {
                    score += valueOfLetter(character)
                }
            }
        }
        return 0
    }
} 

错误是:"调用中的参数 #1 中缺少参数

这是第 for (index, letter) in alphabet 行上的另一个错误,它说:"字符串"不可转换为"([字符串,字符串])"

我不确定这些错误意味着什么或如何修复它们。

任何意见或建议将不胜感激。

提前谢谢。

你的方法valueOfLetter接受一个参数,你需要用参数调用它,否则它不起作用。例如:

 valueOfLetter("x")

发生第二个错误是因为您使用的语法结构用于遍历带有数组的字典。使用内置的 enumerate 函数遍历具有索引值的数组:

   for (index, letter) in enumerate(alphabet) {
        if letter = inputLetter.lowercaseString {
            return index + 1
            for character in word {
                score += valueOfLetter(character)
            }
        }
    }
错误消息

是因为无法将[String]数组快速枚举为一对索引和值。为此,您需要使用如上所述的enumerate函数。

我建议将alphabet数组提升为全局变量或成员变量。您可以将其标记为私有,以便在该源文件之外不可见。

// A through Z
private let alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

您可以使用两个函数来计算单词的分数。第一个函数将计算特定字母的点数。第二个函数将获取一个字符串并枚举它,汇总每个字母的点值。

func valueOfLetter(letter: Character) -> Int
{
    let letterString = String(letter).uppercaseString
    let index = find(alphabet, letterString)
    return index != nil ? index! + 1 : 0
}
func scoreForWord(word: String) -> Int
{
    let characters = Array(word)
    return characters.reduce(0) { sum, letter in sum + valueOfLetter(letter) }
}

我知道这与您的初始设置略有不同。我只是想指出内置的 Swift 库函数有多有用。即filtermapreduce

编辑:以下是通过UITextFieldDelegate使用每种方法的方法:

// This will be called every time the text changes in the UITextField
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
    let currentWord = textField.text as NSString
    let newWord = currentWord.stringByReplacingCharactersInRange(range, withString: string)
    let score = scoreForWord(newWord)
    // Do something with the score here
    return true
}
// This will be called when the return key is pressed
func textFieldShouldReturn(textField: UITextField) -> Bool
{
    let word = textField.text
    let score = scoreForWord(word)
    // Do something with the score here
    return true
}

最新更新