2016-09-06 3 views
0

Ich versuche, eine Tabelle der aktuellen locale-Eigenschaften in Code zu bauen, und haben Probleme gestoßen mit dem Versuch, den Wert einer Variablen an eine Funktion zu übergeben:Verwenden Wert der Variablen für Immobilien-Lookup

let currentLocale = Locale(identifier: "en_US") 

let calendar1 = currentLocale.calendar  // "gregorian (fixed)" 

let propertyName = "calendar" 
let calendar2 = currentLocale.propertyName // Error: Value of type 'Locale' has no member 'porpertyName' 

In der letzte Instanz des obigen Codes denkt die Instanz von Locale, dass ich sie "propertyName" übergebe und nicht den Inhalt der Variablen "calendar".

Gibt es eine Möglichkeit, den Wert von propertyName ("calendar") an die Instanz von Locale zu übergeben? Ich weiß, dass Sie in anderen Sprachen den Variablennamen wie "$ propertyName" voranstellen können, und dass er den Wert der Variablen liest.

Ich möchte diese pure Swift wenn möglich beibehalten.

+0

Sie rufen keine Funktion mit Argumenten auf. –

Antwort

3

Sie suchen nach einer Form von key-value coding.

Es ist ein wenig schwierig, da dies ein reines Objective-C-Feature von Cocoa ist, daher funktioniert es nicht mit dem Swift-Overlay-Klassen-Locale; Sie müssen currentLocale zu Objective-C NSLocale umwandeln. Darüber hinaus macht NSLocale seine Attribute über spezielle NSLocale.Key-Typen verfügbar. Nach vielen Gießen, finde ich, dass dies funktioniert:

let calendar2 = 
    (currentLocale as NSLocale).object(forKey:NSLocale.Key(rawValue:propertyName)) 

calendar2 ist jeder getippt, aber Sie können sie werfen in einen String nach unten.

+0

'object (forKey:)', die Methode für 'NSLocale', benötigt einen gültigen NSLocale-Komponentenschlüssel, was" calendar "nicht ist. Meinst du "valueForKey (_ :)"? –

+0

Ja @Matt, wenn ich diese Zeile in den Code stecken, bekomme ich den Fehler: Wert des Typs 'Locale' hat kein Mitglied 'Objekt'. –

+0

Ja, ich habe es funktioniert, aber es war nicht einfach! Eine viel interessantere Herausforderung als ich erwartet hatte. – matt

Verwandte Themen