第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決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)}至少我在函數(shù)“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下面是沒有其他任何內(nèi)容的完整代碼: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條經(jīng)驗 獲得超6個贊

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

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

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

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它的性質(zhì)是存在的。


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

TA貢獻1876條經(jīng)驗 獲得超7個贊

您的受撫養(yǎng)財產(chǎn)需要:

  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 關注
  • 553 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號