2017-04-30 13 views
-1

Firebaseのデータに基づいてラジオボタンをプログラムで作成しようとしています。 Firebaseのデータは基本的に数値になります。そして、forループでその数値を使用して、必要な数のラジオボタンを設定します。私は、Androidでの経験を持っており、迅速に変換しようとしています:"Expected Expression"ラジオボタンを作成するときにセレクタにアクセスする

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の行に "Expected Expression"と書かれた赤い感嘆符があるので、私のエラーがどこに来ているかのようです。

enter image description here

+0

ステートメントごとに文章を翻訳するのではなく、言語を学ぶ時間があれば役に立ちます。赤い感嘆符が付いた文/行の構文を参考にしたい場合は、 – user1046037

+0

をクリックしてください。ありがとうございました。私は構文が異なることを理解していますが、アドバイスをいただければ幸いです。 – tccpg288

+0

コードのスクリーンショットを追加する代わりに、実際のコードを質問に追加してください。エラーメッセージをキャプチャするには、赤いインジケータと「Issue Navigatorで表示」を右クリックします。 –

答えて

1

あなたは声明でそれを文を翻訳するのではなく、言語を学ぶためにいくつかの時間を費やす場合には役立つだろう。スウィフトは、型推論を使用して、あなたが簡単な方法(理想的ではない)をしたい場合は声明

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

のために赤い感嘆符付きの

と文/ラインの構文を参照し、その値に基づいて種類を判別し割り当てられた。それは

myStackView

UIStackView

addArrangedSubview 

ボタン

スウィフトOptionalsを学んを参照してくださいそれに関数の引数のラベルと関数の名前にする必要があり

セレクタ