로컬 스코프에 대한 나의 ios 앱에서 약간의 일관성없는 동작을 발견했습니다.swift에서 if-else 명령문의 로컬 범위 2.3
좌석이 남아있을 때 사람이 이벤트에 등록 할 수 있습니다. 이 경우 OnWaitingList
및 OnWaitingListAt
은 이 아니며이 정의됩니다.
좌석이 없으면 대기자 명단에 올 수 있습니다. 사용자가 동의하면 (OK를 클릭) OnWaitingList가 true로 설정되고 OnWaitingListAt가 unixtime으로 설정됩니다. 두 경우 모두 동일한 DynamoDB 테이블에 저장됩니다.
사람이 여러 이벤트에 자신을 등록 할 수 있습니다. 내가 발견 무엇
사람 첫은 대기자 명단에 오면했다 (왼쪽 없음 석)과 후 다른 이벤트 (왼쪽 석) OnWaitingList이 거짓과 OnWaitingListAt이 0 초기 값에 자동적으로 등록 클래스 정의. 이 두 값은 저장됩니다.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
}
'participant' 변수의 이름을 바꾸면 아무런 차이가 없습니다. 그것들은 모두 이미 다른 변수들이다. – rmaddy
관련 없음 nitpick - 왜 귀하의'참여자 '클래스 이름은 복수입니까? 각 인스턴스는 하나의 참여자를 나타냄니다. 클래스의 이름은 '참가자'여야합니다. – rmaddy
@rmaddy 범위가 작동한다고 생각하는 방식은 다음 중 어느 것입니까? 이 클래스는 Participants라는 DynamoDB 테이블에 매핑됩니다. – kometen