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
"自己が利用可能になる前にプロパティ初期化子内でインスタンスメンバーを使用できません"これはコード実行時のエラーです。初期化エラー
定数を使用してみてください。この変数に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
}
}
以下のコードで使用するのではなく、プロパティを初期化するときにインスタンス変数を使用することはできません。
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
}
}
これを試してみてください:
あなたはあなたが使用しているiPhoneをチェックするためにこの方法を使用することができますstatic
static let screenSize = UIScreen.main.bounds.height
static let IS_IPHONE_4_OR_LESS = screenSize < 568.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
}
これは絶対に行わないでください。 – davidf2281
Swiftは、2段階の初期化を変数に使用します。
スウィフトのクラス初期化は2段階プロセスです。最初の フェーズでは、格納された各プロパティには、それを導入したクラス によって初期値が割り当てられます。格納されたすべてのプロパティ の初期状態が決定されると、2番目のフェーズが開始され、 新しいインスタンスが使用可能とみなされる前に各クラスに格納されたプロパティをカスタマイズする機会が与えられます。
インスタンス変数を初期化する前にアクセスすることはできません。あなたはこの
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