我有一个包含UICell
元素的自定义UISwitch
。当我呈现我的表时,cellForRowAtIndexPath()
将检查用户首选项是否与特定类别匹配,如果它们是订阅,否则它们不是。我写了一些逻辑来根据这个结果切换开关:
if let userPreferences = user["preferences"] as? Array<AnyObject>
{
if userPreferences[indexPath.row].objectId == game.getGameId() {
prefCell.subscribed?.setOn(false, animated: true)
}
}
我已经断开了禁用开关的行,并且它在userPreferences
集合中检索到的当前11个项目中断了9次,但是我的UI上的所有开关都没有更新。为什么会这样?
编辑:经过一些进一步的测试后,似乎if语句总是得到满足,这是非常奇怪的,因为如果字符串不匹配,Swift仍然声称他们做了
例如,如果我有一个ID列表
xyz12345
abc12345
efg12345
执行以下循环:
if let userPreferences = user["preferences"] as? Array<AnyObject>
{
for preference in userPreferences
{
if preference.objectId == game.getGameId()
{
prefCell.subscribed.on = true;
} else {
prefCell.subscribed.on = false;
}
}
}
第一次比较可能是preference = xyz12345
和game.getGameId() = abc12345
。我希望调用第二种情况,因为这些字符串肯定不匹配,但是情况传递为true并且设置了开关,为什么我目睹了这种行为?