How do I call a method from another class in Swift?

Refresh

February 2019

Views

7.2k time

1

When a button is pressed in FirstViewController, I would like for it to call a func pressedButton() in another class (SecondViewController). How do I do this?

I've tried the following, and it does not work right:

SecondViewController().pressedButton()

Here's the code for pressedButton:

func pressLearnButton() {
        let screenSize: CGRect = UIScreen.mainScreen().bounds
        let screenWidth = screenSize.width
        self.scrollView.setContentOffset(CGPoint(x: screenWidth, y: 0), animated: true)
    }

4 answers

4

Syntactically, it seems like you're trying to accomplish what a static method normally does. Unless this is what you're trying to accomplish, and I'm guessing it's not, you need to instantiate your SecondViewController before you call a method on it, assign it to a variable, and call your desired method as follows:

let otherViewController: SecondViewController = SecondViewController()
let result = otherViewController.doSomething()

If you're trying to transition (segue) to another view controller when you click on the button you should be using the prepareForSegue() method to make the transition to the next view controller. Also, don't forget to set the segue identifier on the Storyboard.

Hopefully this is helpful.

1

Прежде всего, вы должны сохранить ссылку на экземпляр SecondViewController в вашем FirstViewController. Затем, для того , чтобы вызвать функцию foo()в SecondViewController от вашего FirstViewController, просто позвоните secondInstance.foo(). Если Foo () является функцией класса, вы можете позвонить сSecondViewController.foo().

class A : UIViewController {
    var myB  = B()

    func callBFoo() {
        myB.foo()
    }

    func callStaticBFoo() {
        B.staticFoo()
    }
}

class B : UIViewController {
    func foo() {
        println("foo")
    }

    class func staticFoo() {
        println("static foo")
    }
}
0

Вы действительно назвать это. Но в вашем случае, это зависит от многих факторов. Кажется, он должен показать что-либо путем вызова метода pressedButton. Необходимо объявить переменную из вас контроллера, добавить его просмотра в связи с текущего контроллера, и вы увидите визуальные данные.

-1

Вы можете попробовать использовать наследование. А потом это сделатьsuperClass.pressedButton()

Используйте эту ссылку для поддержки с наследованием.

Вот код:

class AClass {
    func doSomething() {
        println("Hello from AClass")
    }
}

class Subclass: AClass  {
}

let base_object = AClass()
base_object.doSomething()
//> Hello from AClass


let enhanced_object = Subclass()
enhanced_object.doSomething()
// > Hello from AClass

Надеюсь, это поможет :)