我有非常非常奇怪的事情。 在我简单的函数中,我创建了包含设置参数字典的变量。它被设置为'let',所以内部循环只是读取它。 在循环时间的随机时刻,它会以“未解决的设置”崩溃。 看起来像smth使它成为零。谁做的?Swift 3变量自我删除
private static func preferencesFilter(userIDs: [Int], access: String) -> [User] {
self.sharedInstance.delegate?.updateActionLabel(label: "Filter")
var result = [VKUser]()
let settings = self.parseSettings()
let progressFraction = 1.00/Float(userIDs.count)
var n = 0
for userID in userIDs {
if sharedInstance.stopped {
return []
}
n += 1
let user = VKUser.getUser(id: userID, access_token: access_token)
if settings["gender"] != nil {
if user.sex == settings["gender"] as! String {
if (user.born?.isBetweeen(date1: settings["minAge"] as! Date, date2: settings["maxAge"] as! Date))! {
if settings["country"] != nil {
if user.country == settings["country"] as! String {
result.append(user)
}
}
else {
result.append(user)
}
}
}
}
else {
if (user.born?.isBetweeen(date1: settings["minAge"] as! Date, date2: settings["maxAge"] as! Date))! {
if settings["country"] != nil {
if user.country == settings["country"] as! String {
result.append(user)
}
}
else {
result.append(user)
}
}
}
self.sharedInstance.delegate?.updateProgress(value: Float(n) * progressFraction)
}
return result
}
我想你真的写了很多不安全的代码。尝试添加一些“如果让”组合或“警卫”,以使其更安全。尽量不要强制施放任何东西(用“!”),最终会导致程序崩溃。 我试图将它改写成更快捷和更安全的东西,但即使如此,在所有if-else语句和跳过的案例中都迷失了方向。你是否写过任何单元测试来检查这个方法是否正在做你想要的东西?有很多组合可以或不会追加用户。 – Jelle
@Jelle谢谢你的回答!你的意思是说这本词典有错误吗?但如果它是静态的,它会是怎样的错误。它只是加载到内存中(正如我理解的那样)。我不会动态更新它。它是不是“垃圾收集器”错误的工作? '因为如果我会做“守卫”,那只会意味着它没有错误,脚本工作不正确。 –
我的意思是代码难以阅读,并可能在实际情况下崩溃。我会尝试将它改写成更稳定的东西......坚持下去。 – Jelle