2017-05-17 186 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 
    } 
}