[英]if statement ignores bool value in swift
我必須做錯什么,因為在NSDictionary
內部,值是1或0,並且總是打印"locked"
...
let object: NSDictionary = self.collectionObjects?.objectAtIndex(indexPath.row) as! NSDictionary
if let locked = (object.objectForKey("locked") as? NSNumber)?.boolValue {
println("locked")
} else {
println("open")
}
你在那里沒有測試任何東西
嘗試,
let object: NSDictionary = self.collectionObjects?.objectAtIndex(indexPath.row) as! NSDictionary
let locked = (object.objectForKey("locked") as? NSNumber)?.boolValue
if locked == true
{
println("locked")
}
else
{
println("open")
}
在執行操作時:
if let locked = (object.objectForKey("locked") as? NSNumber)?.boolValue {
...
} else {
...
}
if語句正在檢查您的locked
變量是否已評估為nil
值。 如果它有一個值,那么將執行true
語句塊;否則,將執行true
。 如果它為nil
則將執行false
塊(其他語句)。
這稱為Optional Binding 。
您可以使用可選綁定來確定可選對象是否包含值,如果包含,則使該值可用作臨時常量或變量。 可選綁定可以與if和while語句一起使用,以檢查可選內部的值,並將該值提取到常量或變量中,作為單個操作的一部分。
結果,如果您的變量未求值為nil
則可以在if
塊內使用locked
變量。
例如:
if let locked = (object.objectForKey("locked") as? NSNumber)?.boolValue {
if locked {
println("locked")
} else {
println("open")
}
} else {
println("locked is nil")
}
有關示例,請參見此SO帖子 。
您正在做的是展開條件值,而不是檢查條件值,因此您需要做的是:
方便地,if-let-where語句可以像這樣在一行中為我們做到這一點:
if let object = self.collectionObjects?.objectAtIndex(indexPath.row) as? NSDictionary, locked = object.objectForKey("locked")?.boolValue where locked {
// we have a value here and it happens to be true
} else {
// this means we don't have a value
}
在if語句中也包含第一個let object
-您永遠不會知道,它可以為null
,然后會意外崩潰。
另外,編譯器應該能夠直接處理object -> boolValue
,如果不能,則添加NSNumber
強制回退。
我推薦這個
let object: NSDictionary = self.collectionObjects?.objectAtIndex(indexPath.row) as! NSDictionary
if let locked = object.objectForKey("locked") as? NSNumber where locked.boolValue == true {
print("locked")
}else {
print("open")
}
您僅在檢查值是否為nil。 由於該值不為nil,因此您始終將輸出鎖定為“鎖定”。
嘗試這個
let object: NSDictionary = self.collectionObjects?.objectAtIndex(indexPath.row) as! NSDictionary
if let locked = (object.objectForKey("locked") as? NSNumber)?.boolValue {
If locked == true {
println("locked")
}
else {
println("open")
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.