亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何初始化相互依賴的屬性

如何初始化相互依賴的屬性

慕少森 2019-06-01 14:39:51
如何初始化相互依賴的屬性我想要一張照片移到底部。如果我按下按鈕,圖片應該向下移動1。我添加了圖片和按鈕:var corX = 0var corY = 0var runter: UIButton = UIButton.buttonWithType(UIButtonType.System) as UIButtonvar  image = UIImage(named: "panzerBlau.jpg");var panzer = UIImageView(frame: CGRectMake(corX, corY, 30, 40));    //override func viewDidLoad() {     super.viewDidLoad()     panzer.image = image;    //    self.view.addSubview(panzer);    //     runter.frame = CGRectMake(100, 30, 10 , 10)     runter.backgroundColor = UIColor.redColor()     view.addSubview(runter)     runter.addTarget(self, action: "fahren", forControlEvents:UIControlEvents.TouchUpInside)}至少我在函數“fahren”中說把圖片向下移動1。func fahren(){     corY += 1     panzer.frame = CGRectMake(corX, corY, 30, 40) //    self.view.addSubview(panzer);}所以我的問題是:這些corx和cory的東西有幾個錯誤。沒有它們,它工作的完美,但它比一個單一用途按鈕。錯誤是:ViewController.Type沒有一個名為corX的成員,而ViewController.Type沒有一個成員名為panzer,在這里我得到了我所做的/顯示在哪些行中的錯誤。PS:我使用Xcode Beta 5下面是沒有其他任何內容的完整代碼:import UIKitclass ViewController: UIViewController {     var corX = 0     var corY = 0     var runter: UIButton = UIButton.buttonWithType(UIButtonType.System) as UIButton     var image = UIImage(named: "panzerBlau.jpg");     var panzer = UIImageView(frame: CGRectMake(corX, corY, 30, 40));     override func viewDidLoad() {         super.viewDidLoad()             panzer.image = image;             self.view.addSubview(panzer);         runter.frame = CGRectMake(100, 30, 10 , 10)         runter.backgroundColor = UIColor.redColor()         view.addSubview(runter)         runter.addTarget(self, action: "fahren", forControlEvents:UIControlEvents.TouchUpInside)     }     func fahren(){         corY += 100         panzer.frame = CGRectMake(corX, corY, 30, 40)         self.view.addSubview(panzer);     }}
查看完整描述

3 回答

?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

var corX = 0var corY = 0var panzer = UIImageView(frame: CGRectMake(corX, corY, 30, 40))

問題是SWIFT默認初始化器不能引用另一個屬性的值,因為在初始化時,該屬性還不存在(因為實例本身還不存在)?;旧?,在panzer的默認初始化程序。self.corXself.corY-但沒有self因為self正是我們正在創造的東西。

解決方法之一是使初始化程序懶惰:

class ViewController: UIViewController {
    var corX : CGFloat = 0
    var corY : CGFloat = 0
    lazy var panzer : UIImageView = UIImageView(frame: CGRectMake(self.corX, self.corY, 30, 40))
    // ...}

這是合法的,因為panzer直到稍后第一次被實際代碼引用時才被初始化。到那時,self它的性質是存在的。


查看完整回答
反對 回復 2019-06-01
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

您的受撫養財產需要:

  1. lazy

  2. 明示

    : Type

  3. 使用

    self.

    訪問其他屬性

例子:

let original = "foo"


// Good:

lazy var depend: String = self.original


// Error:

     var noLazy: String = self.original // Error: Value of type '(NSObject) -> () -> URLData' has no member 'original'

lazy var noType         = self.original // Error: Value of type '(NSObject) -> () -> URLData' has no member 'original'

lazy var noSelf: String = original      // Error: Instance member 'original' cannot be used on type 'YourClass'


查看完整回答
反對 回復 2019-06-01
  • 3 回答
  • 0 關注
  • 549 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號