2017-08-09 19 views
0

私は自分のXcodeプロジェクトで得た価値を返そうとしています。 Int値は、ステッパーの@IBAction関数で作成されます。 "メソッド宣言@IBActionは 'ボイド'(not'Int ')を返さなければならない":スイフト3の@IBAction関数からInt変数を返すにはどうすればよいですか?

@IBAction func stepper(_ sender: UIStepper) -> Int { 
    let Number: Int = Int(sender.value) 
    return Number 
print(Number) 

システムは、私は、このエラーを与えています。

+0

ステッパーを直接電話していないときにこれを行う理由はありません。システムがそれを呼び出しています。その戻り値はどこで終わるはずですか? – Connor

+2

@IBActionこれらはイベントです。彼らは結果を返さないはずです –

+0

'var stepperValue:Number?'のようなViewコントローラクラスのクラスレベルで 'var'を使って、' @ IBAction'メソッドの中でその変数 'stepperValue'を使用してください。 'IBAction'は値を返すことができません。 – Annjawn

答えて

1

@IBActionは、ユーザーの操作に基づいて特定のタスクを実行し、値/オブジェクトを返せないメソッドを起動するために使用されるinbuilt属性です。あなたができることは、他のアクションを引き起こしたり、アクションメソッド内の他のグローバル/ローカル変数を初期化することです。

エラー - Methods declared @IBAction must return 'Void' (not'Int')は、単にIBActionメソッドが何も返すことができず、voidという別名を返す必要があることを意味します。これはあなたがビューコントローラのクラスレベルで

をDO-ことができるものであるUIButton用ステッパーの値を使用してのあなたのコメントに基づいて

は、変数

var stepperValue: Int = 0 { 
    didSet{ 
     // use stepperValue with your UIButton as you want 
    } 
} 

そして@IBActionを宣言します -

@IBAction func stepper(_ sender: UIStepper){ 
    stepperValue = Int(sender.value) 
} 

毎回、stepperValueは、コードブロックinsid @IBActionメソッド内に設定されていますdidSetオブザーバが起動し、stepperValueの現在の値は、オブザーバコードブロックdidSet内でアクセスして、必要なロジックで使用することができます。

または、didSetオブザーバーブロックコード全体をIBActionメソッドstepperの内部に入れることもできます。

または、func modifyMyButton(_ stepperval: Int)ロジックをここに書き込んで、IBActionメソッドからこのメソッドを呼び出すことができます。

0

は、ユーザーの操作に基づいてイベントでトリガーされるシステムベースの機能です。彼らはあなたに何も返さない。あなたが望むなら、彼らはあなたのために関数を呼び出します。どのようなシナリオを実装しようとしているのかを記述する必要があります。

+6

これはコメントであり、答えではありません。 – Annjawn

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 16986081) –

関連する問題