2017-07-04 5 views
0

Stackoverflow, ein Startwert zuweisenUIControl Erweiterung für Persistenz

Ich arbeite UIControl zu erweitern, um sich einen einzigen Wert zuweisen. Dies ist so implementiert, dass beim Start ein Wert für die Persistenz vergeben werden kann. Mein Ziel ist es, dies so allgemein wie möglich zu tun, damit es leicht erweiterbar ist. Eine der Hauptkomponenten meines Ansatzes ist das Einschalten des UIControl-Typs. Zum Beispiel, wenn es ein Schalter ist, muss ich ein bool zuweisen und wenn es eine Textansicht ist, muss ich eine Zeichenfolge zuweisen. Doch es gibt mir ein paar Fehler unten angegeben:

Cast von ‚UIControl‘ an unabhängigem Typ ‚UITextView‘ nicht immer

Expressionsmuster vom Typ ‚Bool‘ kann nicht Werte vom Typ entspricht ‚UIControl‘

Ich verstehe, dass dieser Code völlig falsch ist, aber ich habe keinen anderen Ansatz gefunden. Was ist Ihr Vorschlag, diese Methode zu implementieren? Bin ich auf dem richtigen Weg?

extension UIControl { 
    func assignValue(value: Any?){ 
     switch(self){ 
     case self is UISwitch: 
      (self as! UISwitch).isOn = value as! Bool 
     case self is UITextView: 
      (self as! UITextView).text = value as! String 
     default: 
      break 
     } 
    } 
} 

Danke, Macro

+0

Ich reparierte eine meiner Fehler von „Fall selbst, wo selbst UISwitch ist“ und fügte hinzu, aber es wird immer noch nur einen Wert zurückgeben. Mein Ziel ist, dass diese Methode von allen UIControls vererbt und zum Setzen des Wertes verwendet wird. Ich möchte eine Liste von Steuerelementen durchlaufen, um ihren Status festzulegen. Hilft das zur Klärung? – macrocypher

Antwort

0

self.hello(),

Die Syntaxfehler können durch Abgleichen getreu den Fall festgesetzt werden, in dem das Objekt vom Typ UISwitch ist, UITextView usw. Alle UIControl-Elemente erben diese Methode. Es ist möglicherweise besser, die einzelnen implementierten UIElements einzeln zu erweitern, damit sie nicht alle die Funktion haben.

extension UIControl { 
    func assignValue(object: AnyObject, value: Any){ 
     switch(true){ 
     case object is UISwitch: 
      (object as! UISwitch).isOn = value as! Bool 
     case object is UITextView: 
      (object as! UITextView).text = value as! String 
     default: 
      break 
     } 
    } 
} 

self.thanks()