gpt4 book ai didi

ios - swift 2.3 中 if-else 语句中的局部作用域

转载 作者:行者123 更新时间:2023-11-30 13:07:36 24 4
gpt4 key购买 nike

我刚刚在我的 iOS 应用程序中发现了一个关于本地范围的小不一致行为。

当有剩余座位时,一个人可以自行注册参加事件。在本例中,OnWaitingListOnWaitingListAt定义的。

当没有座位时,该人可以进入等候名单。如果用户接受(单击“确定”),则 OnWaitingList 设置为 true,OnWaitingListAt 设置为 unixtime。无论哪种情况,都会保存到同一个 DynamoDB 表。

一个人可以将自己注册到多个事件。

我发现,当一个人首先进入等待名单(没有剩余座位)并且然后将自己注册到另一个事件(剩余座位)时,OnWaitingList 为 false OnWaitingListAt 为 0,即类定义中的初始值。然后这两个值也会被保存。

participant 变量在 if 和 else 语句中的方括号 {} 内定义。

我假设范围绑定(bind)到括号,并允许我有两个具有相同名称和可能不同值的变量,如 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
}

最佳答案

为了防止存储这些值,我将它们设置为 nil。

if (Still seats left) {
let participant = self.createParticipant(self.items[indexPath.row])
participant.OnWaitingList = nil
participant.OnWaitingListAt = nil
Register and so on
}

Amazons documentation在“保存行为选项”中,它指出:

适用于 iOS 的 AWS 移动开发工具包支持以下保存行为选项:

AWSDynamoDBObjectMapperSaveBehaviorUpdate:不影响保存操作中的未建模属性;为建模属性传递 nil 值会将其从 DynamoDB 中的相应项目中删除。默认情况下,对象映射器使用此行为。

因此,设置这些值更多的是一种解决方法,而不是解决方案。

关于ios - swift 2.3 中 if-else 语句中的局部作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39156087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com