从Swift

时间:2017-01-28 09:02:31

标签: ios swift swift3

我有一个JSON文件,JSON的内容如下。我正在iOS中读取JSON文件,并根据我显示的数据显示。

"start": {
            "title": "Welcome",
            "toPoint": "Hello World"
        }

我想要做的是我想提供

的动态值
  

“title”:“欢迎”

来自structenum或任何let常量。

所以,当我从JSON读取数据时,我得到值欢迎

let title = dict["start"]["title"]

现在会有一个像下面这样的常量,它应该显示该文本。

let Welcome = "This is the actual string to display"

是否有可能做这样的事情?

3 个答案:

答案 0 :(得分:1)

你不能;变量名称是代码中的常量,您不能使用字符串值设置它们:)

答案 1 :(得分:1)

是的,可以这样做。 你所需要的只是一本词典。

var titles: [String: String] = ["Welcome": "This is the actual string to display"]
let title = dict["start"]["title"]
let Welcome = titles[title]

如果您不想使用词典,可以使用KVC获取iVar属性。 只需确保您的班级继承自NSObject

let Welcome = "This is the actual string to display"
let title = dict["start"]["title"]
let welcomeString = self.value(forKey: title)
print("Welcome:\(welcomeString)")

或者,您可以将所有字符串移动到单独的类中(而不是Struct,因为KVC不适用于结构):

class ViewController: UIViewController {



override func viewDidLoad() {
    super.viewDidLoad()

    let title = dict["start"]["title"]
    let welcome = Strings.value(forKey: title)
    print("Welcome:\(welcome)")
}


//MARK: - Strings for our ViewController
fileprivate class Strings:NSObject {
    static let Welcome = "This is the actual string to display"
}

}

答案 2 :(得分:1)

分析您的问题

我试着从10分钟开始思考为什么你真的需要这个?

我想你需要这个本地化的东西?

然后有很多解决方案。

国际化和本地化

Apple已经包含了许多用于国际化和本地化的玩具:

见这里:https://developer.apple.com/internationalization/

或者还有很多其他的库让i18n更容易上线

例如:https://github.com/Kekiiwaa/Localize

词典解决方案

如果您不喜欢上述解决方案,唯一的方法是通过字典:

var dict = [
    "Welcome" : "Hello Wold",
    "Thanks"  : "Tank you",
    "Hello"   : "Hello"
]

var key = "Welcome"
print(dict[key]!) // -> "Hello Wold"

你可以嵌套词典:

var dict = [
    "en": [
        "Welcome" : "Hello Wold",
        "Thanks"  : "Tank you",
        "Hello"   : "Hello"
    ],
    "de": [
        "Welcome" : "Guten Tag",
        "Thanks"  : "Danke",
        "Hello"   : "Hallo"
    ]
]

var language = "de"
var key = "Welcome"
print(dict[language]![key]!) --> "Guten Tag"

PS:但你应该更好地使用默认的i18n解决方案

逆向工程

用于逆向工程是Mirror用于检查类和结构以及枚举的类

如果您对此感兴趣,请参阅:https://developer.apple.com/reference/swift/mirror