ios - Swift/NSMutableDisctionary init/如何使值可选

标签 ios swift firebase firebase-realtime-database

为了将数据存储到我的 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)")
            }
        }
    }
}

调用者:

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)
}

我希望 freeclub 是可选的,所以我可以将它们设置为 nil ,如下所示: saveDateToFirebase(formatter.stringFromDate(date),免费:nil,club:nil)

实现这一点的最佳实践是什么?非常感谢您的帮助。

PS:free:“true”,club:“11er”已硬编码以进行测试。

PPS:我尝试设置init(date:String,free:String?,club:String?),但Xcode强制我稍后解开它们...

最佳答案

我可以通过一些解决方法将它们设为可选(以便能够将它们设置为零):

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"])

}

现在我可以这样调用它:

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)
}

如果我也想的话,最后让它们nil:

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

关于ios - Swift/NSMutableDisctionary init/如何使值可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39625413/

相关文章:

android - 如何在不允许查看或克隆整个项目的情况下显示源代码中的更改

ios - 未调用 UICollectionReusableView 方法

带有表情符号的快速光标位置

swift - 在主 bundle 的子目录中查找文件时获取nil

swift - 无法使用类型为 'sizeof' 的参数列表调用 '([Double])'

javascript - 在 Angular 中使用 Observable 数组时如何在模板中显示数据

ios - 带有 CollectionView 和文本行的 TableView 部分

ios - 如何为模态视图表单实现 "X"关闭按钮

ios - 基本 Swift 3 应用程序因 Firebase 崩溃

javascript - Google Cloud Firestore 仅查询时间戳早于 x 的文档