2016-04-04 10 views
0

Ich habe eine UIView Unterklasse etwas wie folgt aus:Wie kann ich eine Funktion nur aufrufen, nachdem alle Eigenschaften in meiner UIView-Unterklasse festgelegt wurden?

class AView: UIView { 
    var aString = "A String" 
    var aBool = true 

    override func didMoveToSuperview() { 
     func doSomethingWithTheString() { 
      if aBool { 
       doSomething(withString: aString) 
      } 
     } 
    } 
} 

Dann füge ich eine UIView zu einem Storyboard und legen es ist Klasse als AView. Ich verbinde es meiner Ansicht-Controller und dies zu tun:

@IBOutlet weak var aView: AView! 

override func viewDidLoad() { 
    aView.aBool = false 
    aView.aString = "Another String" 
} 

Die Sache ist, wenn doSomethingWithTheString() genannt wird aBool noch true und aString ist noch "A String", obwohl ich sie bei viewDidLoad() geändert.

Also gibt es irgendwo in AView wo kann ich setzen doSomethingWithTheString() für es nur dann aufgerufen werden, wenn alle Eigenschaften festgelegt wurden? Ich hoffte didMoveToSuperview() würde den Trick machen, aber anscheinend ist es noch zu früh.

Ich dachte, es in einem Setter der Eigenschaft aufrufen, aber ich weiß nicht, welche Eigenschaften festgelegt werden und die mit ihren Standardwerten bleiben, und es sollte nur aufgerufen werden, wenn die letzte Eigenschaft festgelegt wurde.

+0

Warum nicht nennen es am Ende des viewDidLoad zu arbeiten? – Eiko

+0

@Eiko Du meinst call 'aView.doSomethingWithTheString()'? Nun, ich muss vielleicht viele Funktionen aufrufen und ich möchte nicht, dass jeder, der meinen Code benutzt, immer alle diese Funktionen aufrufen muss, wenn sie automatisch von AView selbst aufgerufen werden könnten. Einige Funktionen können auch private Eigenschaften als Parameter oder nur Parameter verwenden, über die der Benutzer nichts weiß. Im Idealfall möchte ich es in der AView-Klasse nennen. – dbmrq

+0

Weird Definition Ihrer Funktionen: Was ist das Verhalten von 'func didMoveToSuperview() { func doSomethingWithTheString() {}}' – Xvolks

Antwort

0

Put aString und aBool in einem Wörterbuch (aDictionary) dann

var aDictionary: NSDictionary? { 
    didSet{ 
     doSomethingWithTheString() 
    } 
} 

natürlich etwas die doSomethingWithTheString() ändern erklären mit dem Wörterbuch

+0

Kreative Lösung. :) Vielen Dank! – dbmrq

Verwandte Themen