2016-07-05 3 views
0
import Foundation 
import UIKit 


class GameController: UIViewController { 


@IBOutlet weak var gameImage: UIImageView! 
@IBOutlet weak var softButton: UIButton! 
@IBOutlet weak var notButton: UIButton! 
@IBOutlet weak var scoreLabel: UILabel! 
var timer = NSTimer() 


override func viewDidLoad() { 
    super.viewDidLoad() 
    self.gameImage.image = UIImage(named: "king1") 

} 

//choose random image and set as game image 
func randomGameImage() -> String { 

    //these arrays hold the image names 
    let kingArray = ["king1", "king2", "king3"] 
    let notArray = ["not1", "not2", "not3"] 

    //this number decides which array to pull from 
    let randomNumber = Int(arc4random_uniform(2)) 

    //this number picks what image from the array 
    let imageNumber = Int(arc4random_uniform(3)) 

    //holds the name of the image 
    var gameImageString:String 

    //sets image name 
    if randomNumber >= 1 { 

     gameImageString = kingArray[imageNumber] 

    }else{ 

     gameImageString = notArray[imageNumber] 

    } 

    //sets image 
    self.gameImage.image = UIImage(named: gameImageString) 

    //returns name of image 
    return gameImageString 
} 

var bool = true 
var score = 0; 
var imageShowing:String = randomGameImage()//"king" 

(インスタンスメソッドの使用タイプ「GameController」オン「randomGameImageは」;?あなたの代わりにタイプ「GameController」の値を使用することを意味した)他の関数の本体で自分の関数を呼び出すことはできますが、クラス自体では呼び出せないのはなぜですか?

@IBAction func kingTapped(sender: AnyObject) { 

    if imageShowing.rangeOfString("king") != nil { 
     score += 1 
     scoreLabel.text = String(score) 
     imageShowing = randomGameImage() 

    }else{ 
     performSegueWithIdentifier("gameOver", sender: bool) 

    } 
} 

@IBAction func notTapped(sender: AnyObject) { 

    if imageShowing.rangeOfString("not") != nil { 
     score += 1 
     scoreLabel.text = String(score) 
     imageShowing = randomGameImage() 

    }else{ 
     performSegueWithIdentifier("gameOver", sender: bool) 

    } 
} 



} 
私が呼び出すことができる理由

は、誰かが私に教えてくださいすることができ他のメソッドではrandomGameImageメソッドですが、メソッド外ではありません。申し訳ありません、私はプログラミングのノブです。

答えて

0

理由はこれと同じである:スウィフトの2フェーズの初期化で Swift Computed properties cannot be used in init?

、あなたはフェーズ1を仕上げまでselfにアクセスすることはできません。プロパティにデフォルト値を代入するのは、フェーズ-1の最初の段階で、initを呼び出す前に行われます。したがって、ストアド・プロパティーのデフォルト値式にselfを使用することはできません。つまり、インスタンス・メソッドを呼び出すことも、他のインスタンス・プロパティーを使用することもできません。

クラスメソッドまたはグローバル関数を初期値として使用できます。

+0

私はプログラミング用語について幅広い知識がありません。もしあなたが説明できれば...私はrandomGameImageをクラスメソッドにすることができますか?これは私が書いた関数/メソッドをどうやって使うのかなんてばかげているようです。 – LearningCurve

+0

あなたの 'randomGameImage()'はまだ初期化されていないかもしれないインスタンスプロパティ 'self.gameImage'にアクセスしています。したがって、行を削除すると、それをクラスメソッドにすることができます。 'func randomGameImage()'の前に 'class'の接頭辞を付けるだけです。しかし、他の部分を修正する必要があります。 – OOPer

+0

メソッドにインスタンスプロパティが含まれていない場合でも、パラメータがインスタンスプロパティであれば同じエラーが発生しますが、正しいですか? – LearningCurve

関連する問題