【发布时间】:2016-09-28 08:14:25
【问题描述】:
我已经将我的 Swift 2.3 项目转换为 swift 3。现在编译器不再抛出任何错误,但它会继续编译。 CPU 就像 100% 一样,如果你不停止它,它会持续编译 50 分钟或更长时间。
Xcode 一直在说 Building .. |编译 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
]
}
}
输入合同是:
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()
}
}
model 只是一个基类,它也有另一个用于 json 的 init。
当我在构建日志上运行分析器时,我的所有模型都需要很长时间才能创建 NSDictionary。但是为什么呢?
【问题讨论】:
-
1.您是否尝试过清理项目/重新启动 Xcode/等? 2. 你有没有试过在一个单独的项目中编译这个 Swift 文件?如果没有,请发布它所挂的 Swift 文件的内容。
-
你好,我也有同样的问题,你有解决办法吗?
-
@fiks 我在课堂上编辑了我的问题。
-
这可能是类型推断的问题。您能否尝试将您的字典存储在一个变量中,例如
let dict: [String: Any] = //...initialisation。然后返回dict as NSDictionary。另外,你真的需要 NSDictionary 吗?你为什么不使用普通的 Swift 字典? -
我已经尝试过的第一个变量不是解决方案。我也觉得有问题。但我认为 NSDictionary 可以与 Dictionary 互换?所以你建议我删除 NSDictionary 并像这样返回 Dictionary
?