以前是搞iOS,首次接觸Swift,在寫一個小Demo的時候遇到一個問題
我寫了兩個全域變數,獲取螢屏的寬高,起初放在class類中,但是沒有放在viewDidLoad中,這時我在viewDidLoad中創建了一個控制元件,去使用這個寬高是沒有問題的,后來發現這個控制元件需要在其他方法中用,就把這個控制元件提到viewDidLoad外,這是就出現如題的Bug
代碼如下:
class ViewController: UIViewController,UISearchBarDelegate {
let mainW:CGFloat = UIScreen.main.bounds.width
let mainH:CGFloat = UIScreen.main.bounds.height
let searchBar:UISearchBar = UISearchBar.init(frame: CGRect(x: 20, y: 100, width: mainW-40, height: 50))
override func viewDidLoad() {
super.viewDidLoad()
searchBar.placeholder = "請輸入關鍵字"
searchBar.text = "我有一座恐怖屋"
}
}
bug描述:
Cannot use instance member 'mainW' within property initializer; property initializers run before 'self' is available
然后我把寬高放在class外面就又可以了
let mainW:CGFloat = UIScreen.main.bounds.width
let mainH:CGFloat = UIScreen.main.bounds.height
class ViewController: UIViewController,UISearchBarDelegate {
let searchBar:UISearchBar = UISearchBar.init(frame: CGRect(x: 20, y: 100, width: mainW-40, height: 50))
override func viewDidLoad() {
super.viewDidLoad()
searchBar.placeholder = "請輸入關鍵字"
searchBar.text = "我有一座恐怖屋"
}
}
這里我想問 我這兩個寬高是不能放在class中嗎?
uj5u.com熱心網友回復:
你把寬高的let換成lazy var就可以了轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/119753.html
標籤:Swift
