Swift - 无法将多个项添加到firebase数据库的条目中

时间:2018-05-17 15:47:16

标签: swift firebase

我遇到的问题是每个解决方案都在同一块砖墙上运行。我有一个链接到Firebase后端的用户创建页面。我正在尝试允许用户进行多个首选项选择,然后将他们的选择推送到Firebase中创建的用户数据库。

我的问题发生在我将多个偏好放入记录他们最喜欢的运动队(让团队=)变量的空间时,我从Xcode引出了各种错误:

  

"条件绑定的初始化程序必须具有可选类型,而不是......"

我尝试过创建一个数组并强制将这些项目放在一起,就像下面的例子一样,没有任何乐趣。有什么想法吗?

import UIKit
import FirebaseAuth
import FirebaseDatabase
import DropDown

class CreateUsernameViewController: UIViewController {
    let dropDown = DropDown()

    @IBOutlet weak var chooseBaseballButton: UIButton!
    @IBOutlet weak var chooseBasketballButton: UIButton!
    @IBOutlet weak var chooseFootballButton: UIButton!
    @IBOutlet weak var chooseHockeyButton: UIButton!
    @IBOutlet weak var chooseRugbyButton: UIButton!
    @IBOutlet weak var chooseSoccerButton: UIButton!

    let chooseBaseballDropDown = DropDown()
    let chooseBasketballDropDown = DropDown()
    let chooseFootballDropDown = DropDown()
    let chooseHockeyDropDown = DropDown()
    let chooseRugbyDropDown = DropDown()
    let chooseSoccerDropDown = DropDown()

    lazy var dropDowns: [DropDown] = {
        return [
            self.chooseBaseballDropDown,
            self.chooseBasketballDropDown,
            self.chooseFootballDropDown,
            self.chooseHockeyDropDown,
            self.chooseRugbyDropDown,
            self.chooseSoccerDropDown]
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        setupDropDowns()
    }

    @IBOutlet weak var usernameTextField: UITextField!

    @IBAction func chooseBaseball(_ sender: UIButton) {
        chooseBaseballDropDown.show()
    }

    @IBAction func chooseBasketball(_ sender: UIButton) {
        chooseBasketballDropDown.show()
    }

    @IBAction func chooseFootball(_ sender: UIButton) {
        chooseFootballDropDown.show()
    }

    @IBAction func chooseHockey(_ sender: UIButton) {
        chooseHockeyDropDown.show()
    }

    @IBAction func chooseRugby(_ sender: UIButton) {
        chooseRugbyDropDown.show()
    }

    @IBAction func chooseSoccer(_ sender: UIButton) {
        chooseSoccerDropDown.show()
    }

    @IBAction func nextButtonTapped(_ sender: Any) {
        guard let firUser = Auth.auth().currentUser,
            let username = usernameTextField.text,
            let teams = (chooseBaseballDropDown.selectedItem, chooseBasketballDropDown.selectedItem),
        !teams.isEmpty && !username.isEmpty else { return }

        print(username, teams)

        // Mark: Navigates to main storyboard
        UserService.create(firUser, username: username, teams: teams) { (user) in
            guard let user = user else {
                // handle error
                return
            }

            User.setCurrent(user, writeToUserDefaults: true)

            let storyboard = UIStoryboard(name: "Main", bundle: .main)

            if let initialViewController = storyboard.instantiateInitialViewController() {
                self.view.window?.rootViewController = initialViewController
                self.view.window?.makeKeyAndVisible()
            }
        }
    }

    func setupDropDowns() {
        setupChooseBaseballDropDown()
        setupChooseBasketballDropDown()
        setupChooseFootballDropDown()
        setupChooseHockeyDropDown()
        setupChooseRugbyDropDown()
        setupChooseSoccerDropDown()
    }

    func setupChooseBaseballDropDown() {
        chooseBaseballDropDown.anchorView = chooseBaseballButton

        chooseBaseballDropDown.bottomOffset = CGPoint(x: 0, y: chooseBaseballButton.bounds.height)

        chooseBaseballDropDown.dataSource = ["MLB: Anaheim", "MLB: Arizona", "MLB: Atlanta", "MLB: Baltimore", "MLB: Boston", "MLB: Chicago C", "MLB: Chicago WS", "MLB: Cincinnati", "MLB: Cleveland", "MLB: Colorado", "MLB: Detroit", "MLB: Houston", "MLB: Kansas City", "MLB: Los Angeles", "MLB: Miami", "MLB: Milwaukee", "MLB: Minnesota", "MLB: New York M", "MLB: New York Y", "MLB: Oakland", "MLB: Philadelphia", "MLB: Pittsburgh", "MLB: St. Louis", "MLB: San Diego", "MLB: San Francisco", "MLB: Seattle", "MLB: Tampa Bay", "MLB: Texas", "MLB: Toronto", "MLB: Washington"
        ]

        chooseBaseballDropDown.selectionAction = { [weak self] (index, item) in self?.chooseBaseballButton.setTitle(item, for: .normal)
            return
        }
    }

    func setupChooseBasketballDropDown() {
        chooseBasketballDropDown.anchorView = chooseBasketballButton

        chooseBasketballDropDown.bottomOffset = CGPoint(x: 0, y: chooseBasketballButton.bounds.height)

        chooseBasketballDropDown.dataSource = ["NBA: Atlanta", "NBA: Boston", "NBA: Charlotte", "NBA: Chicago", "NBA: Cleveland", "NBA: Dallas", "NBA: Denver", "NBA: Detroit", "NBA: Golden State", "NBA: Houston", "NBA: Indiana", "NBA: Los Angeles C", "NBA: Los Angeles L", "NBA: Memphis", "NBA: Miami", "NBA: Milwaukee", "NBA: Minnesota", "NBA: New Jersey", "NBA: New Orleans", "NBA: New York", "NBA: Oklahoma City", "NBA: Orlando", "NBA: Philadelphia", "NBA: Phoenix", "NBA: Portland", "NBA: Sacramento", "NBA: San Antonio", "NBA: Toronto", "NBA: Utah", "NBA: Washington"
        ]

        chooseBasketballDropDown.selectionAction = { [weak self] (index, item) in self?.chooseBasketballButton.setTitle(item, for: .normal)
            return
        }
    }

    func setupChooseFootballDropDown() {
        chooseFootballDropDown.anchorView = chooseFootballButton

        chooseFootballDropDown.bottomOffset = CGPoint(x: 0, y: chooseFootballButton.bounds.height)

        chooseFootballDropDown.dataSource = ["NFL: Arizona", "NFL: Atlanta", "NFL: Baltimore", "NFL: Buffalo", "NFL: Carolina", "NFL: Chicago", "NFL: Cincinnati", "NFL: Cleveland", "NFL: Dallas", "NFL: Denver", "NFL: Detroit", "NFL: Green Bay", "NFL: Houston", "NFL: Indianapolis", "NFL: Jacksonville", "NFL: Kansas City", "NFL: Los Angeles C", "NFL: Los Anegels R", "NFL: Miami", "NFL: Minnesota", "NFL: New England", "NFL: New Orleans", "NFL: New York G", "NFL: New York J", "NFL: Oakland", "NFL: Philadelphia", "NFL: Pittsburgh", "NFL: San Francisco", "NFL: Seattle", "NFL: Tampa Bay", "NFL: Tennessee", "NFL: Washington"
        ]

        chooseFootballDropDown.selectionAction = { [weak self] (index, item) in self?.chooseFootballButton.setTitle(item, for: .normal)
            return
        }
    }

    func setupChooseHockeyDropDown() {
        chooseHockeyDropDown.anchorView = chooseHockeyButton

        chooseHockeyDropDown.bottomOffset = CGPoint(x: 0, y: chooseHockeyButton.bounds.height)

        chooseHockeyDropDown.dataSource = ["NHL: Anaheim", "NHL: Boston", "NHL: Buffalo", "NHL: Calgary", "NHL: Carolina", "NHL: Chicago", "NHL: Colorado", "NHL: Columbus", "NHL: Dallas", "NHL: Detroit", "NHL: Edmonton", "NHL: Florida", "NHL: Las Vegas", "NHL: Los Angeles", "NHL: Minnesota", "NHL: Montreal", "NHL: Nashville", "NHL: New Jersey", "NHL: New York I", "NHL: New York R", "NHL: Ottawa", "NHL: Philadelphia", "NHL: Pittsburgh", "NHL: San Jose", "NHL: St. Louis", "NHL: Tampa Bay", "NHL: Toronto", "NHL: Vancouver", "NHL: Washington", "NHL: Winnipeg"
        ]

        chooseHockeyDropDown.selectionAction = { [weak self] (index, item) in self?.chooseHockeyButton.setTitle(item, for: .normal)
            return
        }
    }

    func setupChooseRugbyDropDown() {
        chooseRugbyDropDown.anchorView = chooseRugbyButton

        chooseRugbyDropDown.bottomOffset = CGPoint(x: 0, y: chooseRugbyButton.bounds.height)

        chooseRugbyDropDown.dataSource = ["7s: Argentina", "7s: Australia", "7s: Brazil", "7s: Canada", "7s: England", "7s: Fiji", "7s: France", "7s: Japan", "7s: Kenya", "7s: Korea", "7s: New Zealand", "7s: Portugal", "7s: Russia", "7s: Samoa", "7s: Scotland", "7s: South Africa", "7s: USA", "7s: Wales", "7s: Zimbabwe"
        ]

        chooseRugbyDropDown.selectionAction = { [weak self] (index, item) in self?.chooseRugbyButton.setTitle(item, for: .normal)
            return
        }
    }

    func setupChooseSoccerDropDown() {
        chooseSoccerDropDown.anchorView = chooseSoccerButton

        chooseSoccerDropDown.bottomOffset = CGPoint(x: 0, y: chooseSoccerButton.bounds.height)

        chooseSoccerDropDown.dataSource = ["MLS: Chicago", "MLS: Colorado", "MLS: Columbus", "MLS: D.C.", "MLS: Dallas", "MLS: Houston", "MLS: Los Angeles", "MLS: Montreal", "MLS: New England", "MLS: New York FC", "MLS: New York RB", "MLS: Orlando City", "MLS: Philadelphia", "MLS: Portland", "MLS: Salt Lake", "MLS: San Jose", "MLS: Seattle", "MLS: Kansas City", "MLS: Toronto", "MLS: Vancouver"
        ]

        chooseSoccerDropDown.selectionAction = { [weak self] (index, item) in self?.chooseSoccerButton.setTitle(item, for: .normal)
            return
        }
    }
}

1 个答案:

答案 0 :(得分:0)

看起来初始ViewController需要if语句。试着这样做:

let initialViewController = storyboard.instantiateInitialViewController()               
self.view.window?.rootViewController = initialViewController                
self.view.window?.makeKeyAndVisible()