let screenSize = UIScreen.main.bounds.height
let IS_IPHONE_4_OR_LESS = screenSize < 568.0
“在自身可用之前不能在属性初始值设定项中使用实例成员”这是执行代码时得到的错误。初始化错误
let screenSize = UIScreen.main.bounds.height
let IS_IPHONE_4_OR_LESS = screenSize < 568.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
}
}
在初始化属性时不能使用任何实例变量,而不应使用下面的代码。
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
}
}
试试这个:
你需要创建常量static
static let screenSize = UIScreen.main.bounds.height
static let IS_IPHONE_4_OR_LESS = screenSize < 568.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
}
请不要这样做。 – davidf2281
Swift对其变量使用两阶段初始化。
Swift中的类初始化是一个两阶段过程。在第一个 阶段,每个存储的属性由引入它的类 分配一个初始值。一旦每个存储的属性 初始状态已经确定,第二阶段开始,每类给出 机会定制前进一步 新实例被视为准备使用它的存储性能。
因此,在对它们进行初始化之前,您无法访问实例变量。您可以使用getter
此变量尝试使用此
let screenSize = UIScreen.main.bounds.height
var IS_IPHONE_4_OR_LESS :Bool{
get{
return screenSize < 568.0
}
}
请[在错误上搜索](http://stackoverflow.com/search?q=% 5Bswift%5D +在发布之前,无法+ + + + + + + + + + + + +) – rmaddy