Swift - rozróżnianie funkcji.

0

Witam, uczę się Swifta i zastanawia mnie podczas przepisywania kodu, po czym możemy rozpoznać, które nazwy funkcji możemy zmienić, bo definiujemy je na nowo, a które muszą pozostać bez zmian. Weźmy na przykład takie funkcje:

 func searchBarSearchButtonClicked(searchbar: UISearchBar) {
    
        searchbar.resignFirstResponder()
        
        let text = searchBar.text
        let URL2 = NSURL(string: text!)
        let request = NSURLRequest(URL: URL2!)
        print(text)
        
        webViewer.loadRequest(request)
    }
    
    func webViewDidStartLoad(_ : UIWebView)
    {
        activityIndicator.startAnimating()
    }

    func webViewDidFinishLoad(_ : UIWebView)
    {
        activityIndicator.stopAnimating()
    }

Nie można zmienić żadnej nazwy z trzech podanych przeze mnie funkcji, ponieważ wtedy nie będzie działała. Myślałem, że możemy to określić po "override"(bo po prosty nadpisujemy już istniejącą, z której korzystamy), jednak w tym przypadku nie występuje "override", a i tak korzystamy już tak jakby z gotowców. Mam nadzieję, że zrozumiecie co mam na myśli, w przeciwnym razie postaram się to jeszcze jakoś jaśniej wyjaśnić. Z góry dzięki za pomoc.

1

Jeśli chcesz się czegokolwiek ciekawego dowiedzieć o tym języku, to pisz na forum developerów apple albo na stackoverflow. Na 4programmers nawet basic ma większe zainteresowanie :D

1

A jednak są jakieś rodzynki :D Prawdopodobnie masz klasę stosującą się do protokołu UIWebViewDelegate. Na tym "stosowanie się" (conforming) polega, by zapewnić implementację metod o określonych sygnaturach. Stąd nie możesz tych sygnatur zmienić, jeśli chcesz aby Twoje implementacje były wywoływane. override dotyczy dziedziczenia, nie ma tu nic do rzeczy. Musisz poczuć różnicę między podejściem opartym o klasy abstrakcyjne (w językach z multiple inheritance) i protokoły (ObjC, Swift).
Nie "nadpisujemy istniejącej", bo protokół to tylko interfejs. Co prawda w Swifcie możemy podać domyślną implementację, ale w ObjC tak nie było.

0

Ale z tego co zaobserwowałem, to w kodzie nie istnieje możliwość podejrzenia, że jakaś klasa stosuje się do protokołu i zaznaczam to jedynie w Main.storyboard?

0

Jak na moje to jest możliwość sprawdzenia w dokumentacji jakie protokoły są zaimplementowane http://swiftdoc.org/v2.2/type/Array/hierarchy/. Możesz też zawsze sprawdzić źródła https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html.

1 użytkowników online, w tym zalogowanych: 0, gości: 1