2017-10-18 38 views
0

我試圖讓一個字符串屬性顯示不同的語言,如果條件。最後一條語句顯示錯誤!我如何獲得會員價值?斯威夫特,我怎麼能得到一個屬性

struct EN { 
    let hello = "Hello!" 
} 

struct CN { 
    let hello = "Hi!" 
} 

var stringObj:Any? 

var language = "CN" 

if language == "EN" { 
    stringObj = EN() 
} 

if language == "CN" { 
    stringObj = CN() 
} 

print(stringObj!) // "CN(hello: "Hi!")\n" on playground 

print(stringObj!.hello) // error! has no member "hello" 
+0

你的stringObj是任何類型的...任何?沒有hello屬性...你將不得不施放你的Object ......或者使用一個協議作爲支持你的hello的超類協議 –

+0

@LeoDabus他真的應該在這裏定義一個通用協議。請參閱Palle回答... –

+0

我認爲他應該使用NSLocalizedString。沒有必要重新發明輪子。 –

回答

3

正如你已經宣佈stringObj同類型Any?,雨燕編譯器不知道它的實際類型是什麼或者有什麼樣的特性。

如果兩種類型CNEN有一個共同的屬性,你可以使用一個協議來指定這個?

protocol Language { 
    var hello: String { get } 
} 

struct EN: Language {...} 
struct CN: Language {...} 

var stringObj: Language? 

... 
+2

這應該是正確的答案... –

+0

非常感謝,這似乎解決了我的問題。我希望用戶能夠即時更改UI語言,因此不考慮使用NSLocalizedString。 – HIEPING