我正在Swift中开发一个应用程序,我有一个文件ToursObject.swift就可以了:
import Foundation
class ToursObject {
var nameFr: String!;
var nameEn: String!;
var nameEs: String!;
var nameIt: String!;
init(json: NSDictionary) {
self.nameFr = json["name_fr"] as? String;
self.nameEn = json["name_en"] as? String;
self.nameEs = json["name_es"] as? String;
self.nameIt = json["name_it"] as? String;
}
}
在我的tableViewController中,我有这段代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// custom cell
let cell = tableView.dequeueReusableCellWithIdentifier("toursCellReuseIdentifier") as! ToursTableViewCell;
// here i get the actual preferredLanguage from previous screen which propose en, fr, it and es
let codeCountry = NSLocale.preferredLanguages()[0] as String;
// if we print we will have En, Fr, It or Es for codeCountry
// I want do something like that but of course when i build I have this error message from xCode : Value of type 'ToursObject" has no member 'name'
cell.titleLabel.text = (self.arrayOfAvailableToursObject[indexPath.item].name+codeCountry);
// work correctly because no concatenation on the name of member
cell.descriptionLabel.text = (self.arrayOfAvailableToursObject[indexPath.item].nameEn);
return cell;
}
问题在于这一行,因为我不知道如何连接来调用我的字典中的好键:
cell.titleLabel.text = (self.arrayOfAvailableToursObject[indexPath.item].name+codeCountry);
我认为不可能像我想的那样做,但还有另一种解决方案吗?
提前感谢您的帮助。
答案 0 :(得分:0)
所以问题是你需要通过语言动态访问事物吗?在这种情况下,通过使用具体属性将JSON反序列化为对象,您可以为自己做更多的工作。为什么不保持动态?
class ToursObject {
var nameForCountry: [String:String]!;
init(json: NSDictionary) {
self.nameForCountry = // deserialize into your typed dictionary;
}
}
然后您可以按如下方式访问:
cell.titleLabel.text =
self.arrayOfAvailableToursObject.nameForCountry[codeCountry]
答案 1 :(得分:0)
嗨,谢谢你帮忙ColinE现在正在工作,
通过示例为那些需要知道如何解决问题的人完成答案,您可以在下面找到我的案例解释:
在我的文件ToursObject.swift中,我将其更改为:
class ToursObject {
var nameForCountry: [String:String]!;
init(json: NSDictionary) {
// array of strings for one special key with selectedLanguage
self.nameForCountry = ["fr":(json["name_fr"] as? String)!, "en":(json["name_en"] as? String)!, "es":(json["name_es"] as? String)!, "it":(json["name_it"] as? String)!];
}
}
在我的tableViewController中,我现在调用适当的语言
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// custom cell
let cell = tableView.dequeueReusableCellWithIdentifier("toursCellReuseIdentifier") as! ToursTableViewCell;
// here i get the actual preferredLanguage string from previous screen which propose "en", "fr", "it" and "es"
let codeCountry = NSLocale.preferredLanguages()[0] as String;
// Configure labels of cell with appropriate language
cell.titleLabel.text = (self.arrayOfAvailableToursObject[indexPath.item].nameForCountry[codeCountry]);
return cell;
}
希望这些答案有所帮助。
非常感谢,