2017-05-17 30 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

定数を使用してみてください。この変数にgetterを使用することができ、プログラムが実行時に変更しないことがあり、固定値を参照してください。 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

これを試してみてください:

あなたはあなたが使用しているiPhoneをチェックするためにこの方法を使用することができますstatic

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

で定数を作成する必要があります。

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は、2段階の初期化を変数に使用します。

スウィフトのクラス初期化は2段階プロセスです。最初の フェーズでは、格納された各プロパティには、それを導入したクラス によって初期値が割り当てられます。格納されたすべてのプロパティ の初期状態が決定されると、2番目のフェーズが開始され、 新しいインスタンスが使用可能とみなされる前に各クラスに格納されたプロパティをカスタマイズする機会が与えられます。

インスタンス変数を初期化する前にアクセスすることはできません。あなたはこの

let screenSize = UIScreen.main.bounds.height 
var IS_IPHONE_4_OR_LESS :Bool{ 
    get{ 
     return screenSize < 568.0 
    } 
} 
関連する問題