斯威夫特,我怎么能得到一个属性
问题描述:
我试图让一个字符串属性显示不同的语言,如果条件。最后一条语句显示错误!我如何获得会员价值?斯威夫特,我怎么能得到一个属性
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"
答
正如你已经宣布stringObj
同类型Any?
,雨燕编译器不知道它的实际类型是什么或者有什么样的特性。
如果两种类型CN
和EN
有一个共同的属性,你可以使用一个协议来指定这个?
protocol Language {
var hello: String { get }
}
struct EN: Language {...}
struct CN: Language {...}
var stringObj: Language?
...
+2
这应该是正确的答案... –
+0
非常感谢,这似乎解决了我的问题。我希望用户能够即时更改UI语言,因此不考虑使用NSLocalizedString。 – HIEPING
你的stringObj是任何类型的...任何?没有hello属性...你将不得不施放你的Object ......或者使用一个协议作为支持你的hello的超类协议 –
@LeoDabus他真的应该在这里定义一个通用协议。请参阅Palle回答... –
我认为他应该使用NSLocalizedString。没有必要重新发明轮子。 –