无法调用ViewController()的方法

时间:2018-08-20 14:01:21

标签: ios swift

我只是想在ViewController类中创建一个方法并能够调用它。

这是我的代码(我记下了我尝试调用它的2种方法以及出现的错误):

import UIKit

class ViewController: UIViewController{
    func sayHi(name: String){
        print("Hi \(name)")
    }
}

/*
let viewcontroller = ViewController()
viewcontroller.sayHi(name: "Bob")
*/

//Error: Expressions are not allowed at the top level

/*
ViewController.sayHi(name: "Bob")
*/

//Error: Expressions are not allowed at the top level
//Error: Instance member 'sayHi' cannot be used on type 'ViewController'; did you mean to use a value of this type instead?

因此,正如您在注释中看到的那样,我尝试将sayHi称为类型方法和实例方法。两者都不起作用。我最终将创建一个可以从文本输入中获取输入并对其进行操作的函数。 ViewController.swift甚至是执行此操作的正确文件吗?如果是这样,该如何调用已定义的方法?

3 个答案:

答案 0 :(得分:2)

appDelegate中将有此委托,当您启动应用程序时将调用该委托。在此处创建viewController,并将其添加到窗口

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()
    let viewController = ViewController()
    window?.rootViewController = viewController
    viewController.sayHi()
    return true
}

答案 1 :(得分:0)

这将在Playground上有效,但不适用于Xcode。

编译Xcode的代码,然后您有了一个应用程序。调用发生的第一点是AppDelegate,然后从那里初始化您的第一个控制器及其方法。类之外的任何东西都不会执行。

使用游乐场进行测试或任何其他在线快速游乐场。

如果要立即运行sayHi,请将其放在viewDidLoad中并加载应用程序。在再次构建之前,请删除该类之外的所有其他代码:

override func viewDidLoad() {
    super.viewDidLoad()
    sayHi()
}

答案 2 :(得分:0)

  

您可以在函数或块内创建控制器的实例   当您在Xcode Playground的class或Xcode项目中工作时,您在以下位置访问函数sayHi(name: String)的方式   ViewController有效。

对于Xcode项目,请尝试以下操作

import UIKit

class ViewController: UIViewController{
    func sayHi(name: String){
        print("Hi \(name)")
    }
}

class SecondViewController: UIViewController{
    override func viewDidLoad() {
      super.viewDidLoad()
      let viewcontroller = ViewController()
      viewcontroller.sayHi(name: "Bob")
    }
}

初始化SecondViewController时,您可以访问ViewController()

  

要在执行以下命令时立即执行功能sayHi(name:String)   ViewController()已初始化,您可以在viewDidLoad()或   func viewWillAppear()

import UIKit

class ViewController: UIViewController{

override func viewDidLoad(_ animated: Bool) {
    super.viewDidLoad(animated)
 //Call the function hear 
  sayHi(name: "Bob")

}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
   // or call hear
   sayHi(name: "Bob")
}

func sayHi(name: String){
        print("Hi \(name)")
    }
}