如何从不同的函数调用函数?

时间:2014-06-07 11:52:02

标签: ios swift

我试图创建一个简单的应用程序来计算文本字段的字符,但是当用户输入文本时,将用户输入的字符串转换为var的函数和计算字符的函数是马上执行。这是代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var myTextField : UITextField
    @IBOutlet var userTextField : UITextField

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        myTextField.text = fullConstant
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBAction func modifyMyVariable(sender : AnyObject) {
        myVariable = userTextField.text
    }
    @IBAction func clickMe(sender : AnyObject) {
        countCharacters(&fullConstant)
        println(fullConstant)
        myTextField.text = fullConstant
    }
}

这里是" OtherFile.swift"功能所在的位置:

import Foundation

var fullConstant = "Type something!"
var myVariable = ""

func modifyMyVariable() {
    println()
}

func countCharacters(inout fullConstant: String) {
    let FirstPart = "There are "
    let LastPart = " characters"
    var numberOfCharacters = countElements(myVariable)
    switch numberOfCharacters {
    case 0 :
        fullConstant = "There isn't any character yet"
    case 1 :
        fullConstant = "There is just one character"
    default :
        fullConstant = FirstPart + String(numberOfCharacters) + LastPart
    }
}

编辑userTextField后,两个函数都会立即执行,但如果用户输入一个字符,countCharacters函数会在函数{{1}修改之前使用变量myVariable。 },所以它不会计算最后添加的字符。

要解决此问题,我认为我可以从函数modifyMyvariable调用函数countCharacters,因此变量modifyMyVariable在计算字符时已经更改。

1 个答案:

答案 0 :(得分:0)

更改以下内容,看看它是否更容易解决您的问题。

  • 您应该始终只将每个事件链接到一个IBAction。您的IBActions不应该以您在其中尝试的方式命名;它们应该在触发它们的事件之后命名。例如," modifyMyVariable"应该被称为" textEdited"或类似的。
  • 在那" textEdited"方法,做你需要做的所有工作。如果您需要调用另一个函数,请从那里调用它,而不是链接到两个IBActions。
  • 将代码放入" OtherFile"在里面

    class OtherFile {
    }
    

阻止,并将该实例作为视图控制器中的变量保存到该类。您希望避免在类之外声明全局函数。

  • 不相关,但使用带首字母小写的camelCase命名常量,就像你的变量一样。所以FirstPart应该是firstPart。
  • 避免使用' inout'越多越好。每种语言都有它的惯例;在ObjC和Swift中,传入执行工作所需的值,并返回由该工作产生的值。所以:

    func countCharacters(text: String) -> (String)
    
    • 将所有内容放在一起,即可修改MyVariable'功能(应该真正被称为' textEdited')看起来像这样:

      myVariable = userTextField.text
      let characterCount = self.myOtherFileInstance.countCharacters(myVariable)
      myTextField.text = characterCount
      

和其他功能(clickMe)应该删除。