2017-05-17 221 views
-3
let screenSize = UIScreen.main.bounds.height 
let IS_IPHONE_4_OR_LESS = screenSize < 568.0 

「在自身可用之前不能在屬性初始值設定項中使用實例成員」這是執行代碼時得到的錯誤。初始化錯誤

+3

請[在錯誤上搜索](http://stackoverflow.com/search?q=% 5Bswift%5D +在發佈之前,無法+ + + + + + + + + + + + +) – rmaddy

回答

0

常量指的是一個程序可能無法在執行過程中改變的固定值。 IS_IPHONE_4_OR_LESS是一個常數,因此它需要在初始化一個類時的固定值,因此這個錯誤。在你的情況下,它計算基於屏幕高度的價值,所以你可以聲明它像一個計算屬性如下

class Constants: NSObject { 
    let screenSize = UIScreen.main.bounds.size.height 
    var IS_IPHONE_4_OR_LESS: Bool { 
     return screenSize < 568 
    } 
} 
0

在初始化屬性時不能使用任何實例變量,而不應使用下面的代碼。

class constant : NSObject { 
let screenSize = UIScreen.main.bounds.height 
var IS_IPHONE_4_OR_LESS = false 
override init() { 
    IS_IPHONE_4_OR_LESS = screenSize < 568.0 
} 
} 
1

試試這個:

你需要創建常量static

static let screenSize = UIScreen.main.bounds.height 
static let IS_IPHONE_4_OR_LESS = screenSize < 568.0 
0

您可以用這種方式來檢查你正在使用的iPhone:

struct ScreenSize{ 

    static let width = UIScreen.main.bounds.size.width 
    static let height = UIScreen.main.bounds.size.height 
    static let maxLength = max(ScreenSize.width, ScreenSize.height) 
    static let minLength = min(ScreenSize.width, ScreenSize.height) 
    static let scale = UIScreen.main.scale 
    static let ratio1619 = (0.5625 * ScreenSize.width) 
} 

struct DeviceType{ 

    static let isIphone4orLess = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.maxLength < 568.0 
    static let isIPhone5 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.maxLength == 568.0 
    static let isIPhone6 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.maxLength == 667.0 
    static let isIPhone6p = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.maxLength == 736.0 
} 

然後使用這個爲:

if DeviceType.isIPhone5 { 
    //Do iPhone 5 Stuff 
} 
+0

請不要這樣做。 – davidf2281

0

Swift對其變量使用兩階段初始化。

Swift中的類初始化是一個兩階段過程。在第一個 階段,每個存儲的屬性由引入它的類 分配一個初始值。一旦每個存儲的屬性 初始狀態已經確定,第二階段開始,每類給出 機會定製前進一步 新實例被視爲準備使用它的存儲性能。

因此,在對它們進行初始化之前,您無法訪問實例變量。您可以使用getter此變量嘗試使用此

let screenSize = UIScreen.main.bounds.height 
var IS_IPHONE_4_OR_LESS :Bool{ 
    get{ 
     return screenSize < 568.0 
    } 
}