TL;博士
将代码更改应用于常用的struct
会导致构建时间非常慢。这可以避免吗?
我有一个相当大的Swift项目(Xcode 9.2),我使用struct
来保存应用程序中使用的所有样式信息(颜色,间距等),如:
struct Style {
var iconColor: UIColor = .darkGray
var lightTextColor: UIColor = .gray
// ... and many more properties ...
static var defaultStyle: Style {
return Style()
}
static var fancyStyle: Style {
var style = Style()
// ... override style props for more fancyness ...
return style
}
}
每个视图控制器(项目中大约有30个VC,都是在代码中创建的 - 没有使用故事板)有一个Style
实例,并在渲染其UI时使用它:
class MyViewController: UIViewController {
var style = Style.defaultStyle // can be overridden by creator of the VC
override func viewDidLoad() {
super.viewDidLoad()
myLabel.textColor = style.lightTextColor
}
}
这非常好用,只允许在一个地方更改设置,而不会用全局常量污染命名空间。
但是,我注意到当在struct
内更改属性的默认值时,编译时间急剧上升,Xcode基本上执行完全重建。例如。将上述Style.lightTextColor
定义更改为var lightTextColor: UIColor = .green
会导致构建时间与项目的完全重建相媲美。但是,如果我直接在使用它的位置更改值;例如在视图控制器中:myLabel.textColor = .green
,项目构建非常快。
是否有解决方案,最好是通过配置编译器来做...在这种情况下做的工作少了?