【发布时间】:2017-08-18 12:56:59
【问题描述】:
我已经创建了一个计算的静态属性,我希望对其计算一次,之后无论何时访问都只会返回原始计算值。 lazy 属性似乎是我想要的,但经过一番搜索后,静态属性似乎默认为 lazy。
当我运行以下代码时,如果我单独运行每个单元测试,它在第一次访问时会正常运行。但是,当我第二次访问它时,我得到了一个空数组。
static var att: [ConferenceNumber] = {
let list = buildDirectory(for: .att, from: jsonArray)
return list
}()
private static let jsonArray: [Any]? = {
let numbersFilePath = Bundle.main.path(forResource: "numbers", ofType:"json")
let data = try! Data(contentsOf: URL(fileURLWithPath:numbersFilePath!), options: .uncached)
return try! JSONSerialization.jsonObject(with: data) as? [Any]
}()
第二次调用并返回空数组的代码
private static func isAttMeeting(meetingText: String, parsedPhoneNumbers: [String]) -> Bool {
let attPhoneNumbers = ConferenceNumberDirectory.att.map{$0.number}
let attNumberWasParsed = parsedPhoneNumbers.intersects(with: attPhoneNumbers)
if attNumberWasParsed {
return true
}
return meetingText.contains(pattern: attURLRegex) || meetingText.contains(pattern: attURLRegex2)
}
【问题讨论】:
-
第二次怎么访问?你能添加一些代码来看看你到底在做什么吗?
-
您的
att属性不是计算属性,因为您为其分配了一个值。 -
@AndréSlotta 这是造成我问题的原因吗?