2017-02-27 30 views
0

在我下面顯示的swift 3程序中,我想訪問計算的初始值設定項內的計算變量'darkColor'。但是SWIFT 3編譯器給我一個錯誤:實例成員「darkColor」不能在類型「LoginViewController」如何訪問swift 3中計算的初始化程序中的計算變量?

import UIKit 

class LoginViewController: BaseViewController, UITextFieldDelegate { 

    // FIXME: - computed variables 
    private var darkColor: UIColor { 
     return UIColor(hex: 0x0083C5, alpha: 1) 
    } 

    // FIXME: - create views/computed initializers 
    lazy var textEmail: UITextField = { 
     let textField = UITextField() 
     textField.placeholder = "Email" 
     textField.font = UIFont.systemFont(ofSize: 18, weight: UIFontWeightSemibold) 
     textField.textColor = darkColor  // here I'm getting error that "instance member 'darkColor' cannot be used on type 'LoginViewController'" 
     textField.keyboardType = .emailAddress 
     textField.autocorrectionType = .no 
     textField.translatesAutoresizingMaskIntoConstraints = false 
     textField.delegate = self 
     return textField 
    }() 

    let emailUnderline: UIView = { 
     let view = UIView() 
     view.backgroundColor = darkColor  // here I'm getting error that "instance member 'darkColor' cannot be used on type 'LoginViewController'" 
     view.translatesAutoresizingMaskIntoConstraints = false 
     return view 
    }() 

    // FIXME: - life cycle 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = UIColor.white 
    } 
} 
+0

你需要一個實例類實際創建計算的變量,也許用'類var'或將其移出的類,使之成爲常量,那麼你就可以訪問它 – Tj3n

+0

@ Tj3n - 我認爲你是對的。我必須爲常量 – appleBoy21

+0

@ Tj3n創建另一個類 - 是的,你是對的。我驗證了你的答案。請將答案發布到答案部分,以便我可以將其標記爲已接受 – appleBoy21

回答

1

有計算的變量在使用它初始化幾個可能的方式

  1. 使用self.darkColorlazy變量,因爲它只會被創建時訪問(廣東話訪問self之類的初始化過程中)
  2. 更改類變量,但這會影響所有的實例LoginViewController
  3. let darkColor {...}移到類作用域之外將使它成爲全局常量
0

感謝@ Tj3n給我暗示使用。我發現這個問題有4個解決方案。其中3人來自Tj3n。

解決方案1 ​​ - 使用不同類常量

解決方案2 - 使用類變種而不是變種

class var darkColor: UIColor { 
    return UIColor(hex: 0x0083C5, alpha: 1) 
} 

解決方案3 - 使用靜態讓代替變種

static let darkColor: UIColor = { 
    return UIColor(hex: 0x0083C5, alpha: 1) 
}() 

解決方案4 - 使用self.darkColor作爲惰性var類型的計算變量。 例如

lazy var emailUnderline: UIView = { 
    let view = UIView() 
    view.backgroundColor = self.darkColor 
    view.translatesAutoresizingMaskIntoConstraints = false 
    return view 
}()