“预期表达式”在创建单选按钮时访问选择器

时间:2017-04-30 22:32:27

标签: ios swift firebase firebase-realtime-database

我正在尝试根据Firebase中的数据以编程方式创建单选按钮。 Firebase数据本质上是一个数字,然后我计划在for循环中使用该数字来填充必要数量的单选按钮。我之前有Android的经验,我正试图转换为swift:

import UIKit
import FirebaseDatabase

class PollController: UIViewController {

@IBOutlet weak var passLabel: UILabel!
@IBOutlet weak var pollImage: UIImageView!
var ref: FIRDatabaseReference!
var pollRef: FIRDatabaseReference!

var pass = ""
var passedImageURL = ""

var posX = 0;
var posY = 0;

override func viewDidLoad() {
    super.viewDidLoad()
    ref = FIRDatabase.database().reference()
    pollRef = ref.child("Polls").child(pass)
    passLabel.text = pass
    pollImage.sd_setImage(with: URL(string: passedImageURL), placeholderImage: UIImage(named: "test"))

    pollRef.observe(FIRDataEventType.value, with: {(snapshot) in
    let numberOfChildren = snapshot.childSnapshot(forPath: "answers").childrenCount
    self.passLabel.text = String(numberOfChildren)
    print(numberOfChildren)

    var buttons = [UIButton]()
        // create button1
    for x in 0..<numberOfChildren {
            let button = UIButton(frame: CGRect(x: self.posX, y: self.posY, width: 60, height: 20))
            button.setTitleColor(UIColor.black, for: .normal)
            button.setTitle("No", for: .normal)
            button.setImage(UIImage(named: "checkbox untick.png")!, for: .normal)
            // if the selected button cannot be reclick again, you can use .Disabled state
            button.setImage(UIImage(named: "checkboxredtick.png")!, for: .selected)
            button.tag = Int(x)
        button.addTarget(self, action: #selector(buttonAction(_:))), forControlEvents: .TouchUpInside)
            myStackview.addSubview(button)
            buttons.append(button)
            // create other buttons and add into buttons ...
        }

    func buttonAction(_ sender: UIButton!){
            for button in buttons {
                button.isSelected = false
            }
            sender.isSelected = true
            // you may need to know which button to trigger some action
            // let buttonIndex = buttons.indexOf(sender)
        }
    })


    // Do any additional setup after loading the view.
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }

  }
编辑:我能够缩小问题的范围,但是我仍然有一些理解选择器和发件人的问题。这似乎是我的错误进入的地方,因为在#selector的行上有一个红色的感叹号,上面写着“预期的表达”。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果你花一些时间学习语言而不是按语句翻译它会有所帮助。如果你想要一个快速的方法(不理想),请参考带有红色感叹号的语句/行的语法

对于陈述

for (x in 0 ..< numberOfChildren) { }

Swift使用类型推断,它根据分配的值确定类型。

选择

它必须是带有函数参数标签的函数的名称

myStackView

参考UIStackView

addArrangedSubview

按钮

学习Swift Optionals