Funktionsaufruf innerhalb ViewController Klasse

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Funktionsaufruf innerhalb ViewController Klasse

    Hallo,

    bin relativ neu, was die objektorientierte Programmierung betrifft und habe deshalb noch so einige Probleme, den Fehler im folgenden zu finden. Ich habe in einer ViewController Klasse eine Funktion angelegt, welche mir ein Array zurueckliefert. Diese Array wuerde ich gerne in der Klasse einer Variable zuweisen, das schlägt allerdings mit "Missing argument for parameter #1 in call" fehl. Hier mal der Pseudocode meiner ViewController Klasse:

    Quellcode

    1. class ViewController: {
    2. func myFunc() -> Any{
    3. ...
    4. return array
    5. }
    6. var foo = myFunc() // Missing argument for parameter #1 in call
    7. }


    Koennt ihr mir helfen, hat jemand nen Denkanstoss fuer mich?

    Danke
    Shindy
  • gandhi schrieb:

    In dem Beispiel oben müsste es wahrscheinlich

    Nein, Swift verlangt nicht, den Empfänger self anzugeben.

    nussratte schrieb:

    musst du da diesen optionals quatsch machen mit !

    Auch nein, dann würde die Fehlermeldung etwas von einer unbekannten Funktion sagen. Außerdem liefert myFunc() kein Optional zurück.

    @Shindy: Kannst Du nicht mal die komplette Klasse posten?
    „Meine Komplikation hatte eine Komplikation.“
  • Vereinfacht dargestellt, ein einfacher ViewController:

    Quellcode

    1. import UIKit
    2. class MyViewController: UIViewController {
    3. override func viewDidLoad() {
    4. super.viewDidLoad()
    5. // Do any additional setup after loading the view, typically from a nib.
    6. }
    7. override func didReceiveMemoryWarning() {
    8. super.didReceiveMemoryWarning()
    9. // Dispose of any resources that can be recreated.
    10. }
    11. func myFunc() -> Any{
    12. ...
    13. return myArray
    14. }
    15. }
    Alles anzeigen


    Ich denke der Inhalt der myFunc() wird egal sein? Dort wird nur ein mehrdimensionales Array erzeugt ([["foo", "bar"], [1,2,3], [4,5,6]]).


    Sorry fuer die unsaubere Formatierung, bekomms nicht besser hin.
  • Kannst Du einfach außerhalb eines Scopes in der Klasse auf seine Funktionen zugreifen? 8|
    // Nachtrag:
    Dank Zwischenrufen ;) aus dem Konzept gerissen. Der Code, auf den ich mich beziehe, war Folgender:

    Quellcode

    1. class ViewController: {
    2. func myFunc() -> Any{
    3. ...
    4. return array
    5. }
    6. var foo = self.myFunc() // Wozu wird hier eine Instanzvariable mit den Werten einer Instanzmethode bei der Initialisierung vorbelegt?
    7. }

    'self' ist in dem Kontext ja überhaupt nicht definiert.
    So wird n Schuh (bzw. ein Foo) draus:

    Quellcode

    1. class ViewController {
    2. func myFunc() -> Any {
    3. var values = Array(arrayLiteral: "test", "values", "for", "test", "array")
    4. return values
    5. }
    6. func foo() -> Any {
    7. return myFunc()
    8. }
    9. }
    10. let foo = ViewController().foo()
    Alles anzeigen


    Den Sinn, eine Instanzvariable über eine interne Funktion vorbelegen zu wollen erschließt sich mir nicht.
    Dafür gibt es Getter und Setter. Dein Vorhaben sieht so hässlich javamäßig aus. Richtig cocoamäßig wäre das Ganze eher so:

    Quellcode

    1. class ViewController {
    2. private var _foo = Array(count: 0, repeatedValue: "");
    3. func myFunc() -> Array<String> {
    4. var values = Array(arrayLiteral: "test", "values", "for", "test", "array")
    5. return values
    6. }
    7. init() {
    8. _foo = myFunc();
    9. }
    10. func foo() -> Any {
    11. return _foo
    12. }
    13. }
    14. let foo = ViewController().foo()
    Alles anzeigen


    Noch ein Nachteil von Swift: Umsteiger glauben, sie könnten alles so regeln, wie sie es von Java/C#/sonstwas her kennen. +kotz+

    Übrigens ginge theoretisch auch:

    Quellcode

    1. class ViewController {
    2. var _foo = ViewController.myFunc()
    3. class func myFunc() -> Any {
    4. var values = Array(arrayLiteral: "test", "values", "for", "test", "array")
    5. return values
    6. }
    7. }
    8. let foo = ViewController()._foo
    Alles anzeigen


    Der Unterschied zwischen Klassen- und Instanzmethoden existiert auch in Swift.
    Ob man jetzt + foo/- bar oder class func foo/func bar schreibt…

    Was liest Du an einführender Literatur? :P

    (PS: Nein, es fehlen keine Imports. Ich benutze hier nur Swift, kein Cocoa Framework. Nach wie vor halte ich die Integration für saumäßig schlecht.)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Shindy schrieb:

    Ich sollte mich wohl noch nach ner guten Lektüre umgucken...

    Für den Einstieg in Swift kann ich das offizielle Buch sehr empfehlen:
    itunes.apple.com/us/book-serie…-series/id888896989?mt=11
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P