我剛剛在我的ios應用程序中發現了一個小的不一致的行爲,關於本地範圍。swift中的if-else語句中的本地範圍2.3
當有剩餘座位時,一個人可以註冊一個活動。在這種情況下,OnWaitingList
和OnWaitingListAt
是而不是定義。
當沒有座位時,該人可以進入等候名單。如果用戶接受(單擊確定),則將OnWaitingList設置爲true,並將OnWaitingListAt設置爲unixtime。無論是哪種情況,都保存到同一個DynamoDB表中。
一個人可以註冊自己到多個事件。
我發現了什麼是一個人的時候第一在等候名單上得到(左沒有座位)和然後自身註冊到另一個事件(左座)OnWaitingList是假的,OnWaitingListAt爲0,在初始值類定義。這兩個值也會保存。
A participant
變量在if和else語句的括號{}中定義。
我認爲範圍被綁定到括號中,並允許我有兩個變量,其名稱與this文章中所述的名稱和可能的值不同。我可能是錯的,但在這種情況下,似乎不應該發生這種異花授粉。
具有不同名稱的兩個變量將解決此問題。它不會打破流程,但它很煩人,因爲我無法弄清楚爲什麼會發生這種情況。
if (still seats left) {
let participant = self.createParticipant(self.items[indexPath.row])
dynamoDBObjectMapper.save(participant).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { (task:AWSTask!) -> AnyObject! in
Register person
return nil
})
} else { // Offer people to sign up on a waiting list.
let alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
let waitingListAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel, handler: { (action:UIAlertAction) -> Void in
let participant = self.createParticipant(self.items[indexPath.row])
participant.OnWaitingList = true
participant.OnWaitingListAt = NSDate().timeIntervalSince1970
dynamoDBObjectMapper.save(participant).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { (task:AWSTask!) -> AnyObject! in
Register person with OnWaitingList and OnWaitingListAt set
return nil
})
})
}
func createParticipant(item: AggregatedEvents) -> Participants {
let participant = Participants()
participant?.Timestamp = String(item.timestamp!)
participant?.Id = self.fbId
participant?.Date = item.date!
participant?.Event = item.event!
participant?.Location = item.location!
participant?.Name = self.name
participant?.Time = item.time!
return participant!
}
class Participants: AWSDynamoDBObjectModel, AWSDynamoDBModeling {
var Timestamp: NSString? // Partition key.
var Id: NSString? // Sort key.
var Date: NSString? = "28. okt. 1967"
var Event: NSString? = "PT-AMOK Trening"
var Location: NSString? = "Breim"
var Name: NSString? = "Claus Guttesen"
var Time: NSString? = "19:00"
var OnWaitingList: NSNumber? = false
var OnWaitingListAt: NSNumber? = 0.0
}
重命名任何'參與者'變量對任何行爲都沒有影響。他們都是不同的變數。 – rmaddy
無關nitpick - 爲什麼你的'參與者'類名稱複數?每個實例代表一個參與者。該班級應該被命名爲「參與者」。 – rmaddy
@rmaddy這是我認爲範圍工作的方式。該類映射到名爲參與者的DynamoDB表。 – kometen