我已将我的Swift 2.3项目转换为swift 3.现在编译器不再抛出任何错误,但它会继续编译。 CPU就像100%一样,如果你不停止它,它会继续编译50分钟或更长时间。
Xcode一直在说建筑.. |编译Swift源文件
在构建日志中,它始终停在相同的swift文件上。 swift文件只是简单的模型类,所以我不知道问题是什么。
我在swift 2中遇到了同样的问题,但这是由??
运算符引起的。我重构了代码以删除??
运算符,因此它不再是这个。
如何找出减慢编译时间的原因?
我的模特看起来都一样:
class Test: InputContract {
var appointmentDate: Date!
var startTime: String!
var endTime: String!
var registerDescription: String!
var subjectKey: String!
var channelCode: String!
var relationManagerHrId: String = ""
var employeeUserCode: String = ""
var smsReminderMobileNumber: String = ""
var smsReminderMobileNumberSequence: String!
var contactPhoneNumber: String = ""
var contactPhoneNumberSequence: String!
var smsReminder: Bool = false
override func retrieveInputDictionary() -> NSDictionary {
return ["description" : self.registerDescription, "appointmentDate" : Utils.formattedDate(self.appointmentDate),
"startTime" : self.startTime, "endTime" : self.endTime, "subjectKey" : self.subjectKey, "channelCode" : self.channelCode, "smsReminder" : self.smsReminder ? "true" : "false", "relationManagerHrId" : self.relationManagerHrId, "employeeUserCode" : self.employeeUserCode,
"smsReminderMobileNumber" : self.smsReminderMobileNumber, "contactPhoneNumber" : self.contactPhoneNumber, "smsReminderMobileNumberSequence" : self.smsReminderMobileNumberSequence, "contactPhoneNumberSequence" : self.contactPhoneNumberSequence
]
}
}
InputContract是:
protocol InputDictionaryMapper {
func retrieveInputDictionary() -> NSDictionary
func retrievePublicInputDictionary() -> NSDictionary
}
class InputContract: Model, InputDictionaryMapper {
func retrieveInputDictionary() -> NSDictionary {
fatalError("Each inputContract implementation must implement it's own method: \(NSStringFromClass(type(of: self)))")
}
func retrievePublicInputDictionary() -> NSDictionary {
fatalError("Each inputContract implementation must implement it's own method: \(NSStringFromClass(type(of: self)))")
}
required init(json: JSON) {
fatalError("init(json:) has not been implemented")
}
override init() {
super.init()
}
}
模型只是一个基类,也有json的另一个init。
当我在构建日志上运行分析器时,我所有的模型都花了很长时间来创建NSDictionary。但是为什么?
答案 0 :(得分:5)
所以问题是我们创建了很多这样的词典:
BalanceTransactionValidator
如果您将其重写为
let dict = ["key": value, "key2": value2]
然后编译器神奇地每个模型只需要15到20毫秒而不是每个模型2000毫秒。
您可以使用构建时间分析器应用程序自行尝试: - )
答案 1 :(得分:0)
将项目迁移到swift 3之后,我遇到了同样的问题,但经过大量研发后,我找到了解决方案。这需要时间,因为字典和数组没有数据类型。