"textViewDidChange" Swift 的重新声明无效

Invalid Redeclaration of "textViewDidChange" Swift

我有三个不同的文本框,我需要在其中使用 3 种不同的 "textViewDidChange" 方法。将它们组合成一个功能对我来说不起作用,因为它们是三种可能相互影响的不同动作。所以我正在尝试制作三个不同的功能,如下所示。但是我收到 "invalid redeclaration" 错误。我该如何解决?

func textViewDidChange(messageTxt1: UITextView) {

    var len = count(messageTxt.text.utf16)

    var diff = 90 - len

    if diff < 0 {

        charsLbl.textColor = UIColor.redColor()
    } else {

        charsLbl.textColor = UIColor.blackColor()
    }

    charsLbl.text = "\(diff) chars left"

}


func textViewDidChange (messageTxt2: UITextView) {

    refreshResults()

    var len2 = count(messageTxt2.text.utf16)

    if len2 > 3 {

        println("search")

    }

    else

    {

        resultsTable.hidden = true

    }

    var diff2 = 30 - len2

    if diff2 < 0 {

        charsLbl2.textColor = UIColor.redColor()
    } else {

        charsLbl2.textColor = UIColor.blackColor()
    }

    charsLbl2.text = "\(diff2) chars left"


}


func textViewDidChange (messageTxt3: UITextView) {


    var len3 = count(messageTxt3.text.utf16)

    var diff3 = 30 - len3

    if diff3 < 0 {

        charsLbl3.textColor = UIColor.redColor()
    } else {

        charsLbl3.textColor = UIColor.blackColor()
    }

    charsLbl3.text = "\(diff3) chars left"


}

根本不可能,因为每个 textViewDidChange: 方法都采用与参数相同的类型(函数范围内的变量名称在这里不起作用)。

解决具有多个函数的一种方法是使用一个 textViewDidChange: 方法并将其用作调用其他函数的方法,如下所示:

func textViewDidChange(textView: UITextView) {
    switch textView {
    case textView1:
        textViewDidChange1()
        break
    case textView2:
        textViewDidChange2()
        break
    case textView3:
        textViewDidChange3()
        break
    default:
        print("Shouldn't happen")
        break
    }
}

func textViewDidChange1() {
    // Do something
}

func textViewDidChange2() {
    // Do something
}

func textViewDidChange3() {
    // Do something
}

textView1、textView2 和 textView3 是您的 UITextView 的出口。 这对我来说有点矫枉过正,但它确实有效。

  1. 您正在创建三个具有相同名称的方法 textViewDidChange
  2. 在你的情况下使用 tag 属性 并且只为所有定义一个方法。

例子

let textView1 = UITextView()
textView1.tag = 1

let textView2 = UITextView()
textView2.tag = 2

let textView3 = UITextView()
textView3.tag = 3

In method just add condition for that.

func textViewDidChange (messageTxt: UITextView) {

if messageTxt.tag == 1
{
     // Your code for textview 1
}
else if messageTxt.tag == 2
{
      // Your code for textview 2
}
else if messageTxt.tag == 3
{
    // Your code for textview 3
}}