简体   繁体   English

Swift / NSMutableDisctionary init /如何使值可选

[英]Swift / NSMutableDisctionary init / How to make value optional

To store data into my firebase I'm using the following Code: 要将数据存储到我的Firebase中,我使用以下代码:

class NewEventDate {

    private let firebase = FIRDatabase.database().reference().child("eventDates")
    let eventDictionary: NSMutableDictionary

    init (date: String, free: String, club: String) {

        eventDictionary = NSMutableDictionary(objects: [date, free, club], forKeys: ["date", "free", "club"])
    }

    func saveEventDate(backendlessUserObjectID: String, item: NSMutableDictionary) {

        let reference = firebase.child(backendlessUserObjectID)
        reference.setValue(item) { (error, ref) -> Void in
            if error != nil {
                SpeedLog.print("\(error)")
            }
        }
    }
}

Called by: 致电者:

func saveDatesLoop() {

    for date in calendarView.selectedDates {
        saveDateToFirebase(formatter.stringFromDate(date), free: "true", club: "11er")
    }
}

func saveDateToFirebase(date: String, free: String, club: String) {

    var newEvent = NewEventDate?()
    newEvent = NewEventDate(date: date, free: free, club: club)
    newEvent?.saveEventDate(backendless.userService.currentUser.objectId, item: newEvent!.eventDictionary)
}

I want free and club to be optional, so I can set them nil like that: saveDateToFirebase(formatter.stringFromDate(date), free: nil, club: nil) 我希望freeclub是可选的,因此我可以将它们设置为nilsaveDateToFirebase(formatter.stringFromDate(date), free: nil, club: nil)

What's the best practice to realize that? 意识到这一点的最佳实践是什么? Help is very appreciated. 非常感谢您的帮助。

PS: free: "true", club: "11er" is hard coded to test. PS: free: "true", club: "11er"经过硬编码测试。

PPS: I've tried to set init (date: String, free: String?, club: String?) , but Xcode forces me to unwrap them later on... PPS:我已经尝试设置init (date: String, free: String?, club: String?) ,但是Xcode迫使我稍后对其进行解包...

I was able to make them optional (to be able to put them nil) with a little workaround: 我可以通过一些解决方法使它们成为可选的(可以将它们设置为零):

init (date: String, free: String?, club: String?, eventText: String?) {
    var localFree = ""
    var localClub = ""
    var localEventText = ""

    if let tempFree = free {
        localFree = tempFree
    }
    if let tempClub = club {
        localClub = tempClub
    }
    if let tempEventText = eventText {
        localEventText = tempEventText
    }

    eventDictionary = NSMutableDictionary(objects: [date, localFree, localClub, localEventText], forKeys: ["date", "free", "club", "eventText"])

}

Now I can call it like this: 现在,我可以这样称呼它:

func saveDateToFirebase(date: String, free: String?, club: String?, eventText: String?) {

    var newEvent = NewEventDate?()
    newEvent = NewEventDate(date: date, free: free, club: club, eventText: eventText)
    newEvent?.saveEventDate(backendless.userService.currentUser.objectId, date: date, item: newEvent!.eventDictionary)
}

And finally make them nil if I want too: 最后,如果我也想让它们nil

saveDateToFirebase(NSDate(), free: nil, club: nil, eventText: nil)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM