let screenSize = UIScreen.main.bounds.height
let IS_IPHONE_4_OR_LESS = screenSize < 568.0
“在self可用之前,不能在属性初始值设定项中使用实例成员”这是执行代码时出现的错误。
答案 0 :(得分:1)
试试这个:
您需要使用static
static let screenSize = UIScreen.main.bounds.height
static let IS_IPHONE_4_OR_LESS = screenSize < 568.0
答案 1 :(得分: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
}
}
答案 2 :(得分: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
}
答案 3 :(得分:0)
Swift对它的变量使用两阶段初始化。
Swift中的类初始化是一个两阶段的过程。在第一个 阶段,每个存储的属性由类分配初始值 介绍它。一旦每个存储属性的初始状态 已确定,第二阶段开始,每个班级都给出 有机会在之前进一步定制其存储的属性 新实例被认为可以使用了。
因此,在初始化实例变量之前,您无法访问它们。您可以为此变量使用getter
尝试使用此
let screenSize = UIScreen.main.bounds.height
var IS_IPHONE_4_OR_LESS :Bool{
get{
return screenSize < 568.0
}
}
答案 4 :(得分: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
}
}