初始化错误

时间:2017-05-17 05:05:27

标签: variables

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

“在self可用之前,不能在属性初始值设定项中使用实例成员”这是执行代码时出现的错误。

5 个答案:

答案 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
    }
 }