2016-09-06 72 views
0

我試圖在代碼生成當前區域設置屬性表,也碰到了問題,試圖給一個變量的值傳遞給函數:使用價值

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' 

在上面的代碼最後一行,Locale的實例認爲我將它傳遞給「propertyName」而不是變量「calendar」的內容。

有沒有辦法將propertyName(「calendar」)的值傳遞給Locale的實例?我知道在其他語言中,可以預先設置變量名稱,如'$ propertyName',並告訴它讀取變量的值。

如果可能,我想保留這個純粹的Swift。

+0

你沒有調用帶參數的函數。 –

回答

3

您正在查找某種形式的key-value coding

這是一個有點棘手,因爲這是一個純Cocoa的Objective-C功能,所以它不適用於Swift覆蓋類Locale;您必須將currentLocale轉換爲Objective-C NSLocale。此外,NSLocale通過特殊的NSLocale.Key類型公開其屬性。鑄造大量後,我發現,這個工程:

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

calendar2的類型爲所有,但你可以將它轉換到一個字符串。

+0

'object(forKey:)','NSLocale'上的方法需要一個有效的NSLocale組件鍵,而「calendar」不是。你的意思是'valueForKey(_ :)'? –

+0

是@Matt,當我插入代碼行時,出現錯誤:'Locale'類型的值沒有成員'object'。 –

+0

是的,我得到它的工作,但它並不容易!比我預期的更有趣的挑戰。 – matt