【问题标题】:Problems with keyboard functions?键盘功能有问题?
【发布时间】:2015-05-16 15:31:17
【问题描述】:

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

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 行上的另一个错误是:'String' not convertible to '([String, String])'

我不确定这些错误的含义或如何修复它们。

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

提前致谢。

【问题讨论】:

    标签: function swift keyboard uitextfield ibaction


    【解决方案1】:

    您的方法valueOfLetter 带参数,您需要带参数调用它,否则它将不起作用。例如:

     valueOfLetter("x")
    

    您的第二个错误正在发生,因为您使用的句法结构用于迭代带有数组的字典。使用内置的enumerate 函数迭代具有索引值的数组:

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

    【讨论】:

      【解决方案2】:

      错误消息是因为您的 [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) }
      }
      

      我知道这与您的初始设置有些不同。我只是想指出built-in Swift library functions are 的用处。即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
      }
      

      【讨论】:

      • 这些函数是您的ViewController 的一部分,您可以在需要时通过UITextFieldDelegate 调用它们,具体取决于您的实现。例如,如果您想实时显示分数(作为用户类型),您可以使用textField:shouldChangeCharactersInRange:replacementString: 委托方法。如果你想在返回键上使用它,textFieldShouldReturn: 委托方法。我会更新帖子以反映两者。
      • 这完全解决了我的问题。
      猜你喜欢
      • 1970-01-01
      • 2012-02-05
      • 2017-06-24
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      相关资源
      最近更新 更多