快速静态常量变量更改导致重新编译

Posted

技术标签:

【中文标题】快速静态常量变量更改导致重新编译【英文标题】:swift static constant variable change cause recompiled 【发布时间】:2017-01-10 01:20:47 【问题描述】:

如果我在一个文件中有一个全局常量比如let host = XXX,那么这个常量的改变会导致所有的项目文件重新编译

【问题讨论】:

这是一个陈述,而不是一个问题。 我的意思是,如果我改变这个常量的值,它会导致重新编辑这个项目。这让我有麻烦了。 东西会被重新编译的事实似乎是合乎逻辑的,因为它可以很容易地基于这些常量执行一些优化。如果您将其设为var,您或许可以避免重新编译,但您可能会损失一些效率。 【参考方案1】:

正确,在该范围内更改某些内容会导致重新编译。

就像您要更改特定类中的常量一样,该类将被重新编译。

如果您需要在代码之外更改值,例如host 那么最好使用包含一些属性的 plist 文件。

示例:

settings.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>host</key>
    <string>1.2.3.4</string>
</dict>
</plist>

example code to get value:

    guard let settingsFileURL = NSBundle.mainBundle().URLForResource("settings", withExtension: "plst") else 
        fatalError("unable to find plist file")
    

    let settings = NSDictionary(contentsOfURL: settingsFileURL)

    guard let host = settings?.valueForKey("host") as? String else 
        fatalError("unable to get host value from plist file")
    

    print("host = \(host)")

【讨论】:

以上是关于快速静态常量变量更改导致重新编译的主要内容,如果未能解决你的问题,请参考以下文章

Makefile 只重新编译更改的对象?

java 静态变量和静态常量

Flask 服务于 Vue.js 包文件。更改时重新编译?

JVM-字节码

常见的Android编译优化问题

OC 中static、const理解