Я просто пытаюсь сделать метод в классе 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 даже правильным файлом для этого? Если это так, как я могу вызвать метод, который я определил?

1
Addison 20 Авг 2018 в 17:01

3 ответа

Лучший ответ

В 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
}
2
Rakesha Shastri 20 Авг 2018 в 14:06

Вы можете создать экземпляр контроллера внутри функции или блока когда вы работаете в проектах class или Xcode в Xcode Playground, вы получаете доступ к функции 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)")
    }
}
0
Vinay Kiran 20 Авг 2018 в 14:27

Это будет работать на игровой площадке, но не на Xcode.

Код XCode компилируется, и тогда у вас есть приложение. Первая точка, где происходит вызов - это AppDelegate, и оттуда инициализируется ваш первый контроллер и его методы. Ничто вне класса не будет выполнено.

Используйте игровую площадку для тестов или любую другую онлайн-игровую площадку.

Если вы хотите запустить sayHi немедленно, поместите его в viewDidLoad и загрузите приложение. Удалите весь следующий код за пределами класса, прежде чем строить снова:

override func viewDidLoad() {
    super.viewDidLoad()
    sayHi()
}
0
regina_fallangi 20 Авг 2018 в 14:05
51932431