programing

인스턴스 멤버를 형식에 사용할 수 없습니다.

showcode 2023. 4. 10. 22:25
반응형

인스턴스 멤버를 형식에 사용할 수 없습니다.

저는 다음과 같은 수업이 있습니다.

class ReportView: NSView {  
    var categoriesPerPage = [[Int]]()
    var numPages: Int = { return categoriesPerPage.count }
}

컴파일이 실패하고 다음 메시지가 표시됩니다.

인스턴스 멤버 'categoriesPerPage'는 'ReportView' 유형에 사용할 수 없습니다.

이것은 무엇을 의미합니까?

경우에 따라서는 가 메서드를 재정의할 때 Xcode가 추가될 수 있습니다.class func뿐만 아니라func. static 메서드에서는 인스턴스 속성을 볼 수 없습니다.그것을 간과하는 것은 매우 쉽다.그건 내 경우였어.

여기에 이미지 설명 입력

다음과 같이 말할 때 구문 오류가 있을 뿐입니다.= {return self.someValue}.그=필요 없습니다.

사용방법:

var numPages: Int {
    get{
        return categoriesPerPage.count
    }

}

당신이 원하는 은 오직 당신은 쓸 수 있다.

var numPages: Int {
     return categoriesPerPage.count
}

첫 번째 방법으로 관찰자를 추가할 수도 있습니다.set willSet&didSet

var numPages: Int {
    get{
        return categoriesPerPage.count
    }
    set(v){
       self.categoriesPerPage = v
    }
}

사용 허가= operator세터로서

myObject.numPages = 5

다른 사용자가 이 문제를 해결하지 못할 경우 인스턴스가 아닌 클래스를 수정하려고 하지 마십시오(변수를 static으로 선언하지 않은 경우).

예:

MyClass.variable = 'Foo' // WRONG! - Instance member 'variable' cannot be used on type 'MyClass'

instanceOfMyClass.variable = 'Foo' // Right!

즉, 인스턴스 변수(var는 해당 클래스의 인스턴스가 있는 경우에만 표시/액세스 가능)가 있으며 정적 범위(클래스 메서드)의 컨텍스트에서 사용하려고 합니다.

static/class 속성을 추가하여 인스턴스 변수를 클래스 변수로 만들 수 있습니다.

클래스의 인스턴스를 인스턴스화하고 해당 변수의 인스턴스 메서드를 호출합니다.

또 다른 예로는 다음과 같은 클래스가 있습니다.

@obc class Album: NSObject {
    let name:String
    let singer:Singer
    let artwork:URL
    let playingSong:Song


    // ...

    class func getCurrentlyPlayingSongLyric(duration: Int = 0) -> String {
        // ...
       return playingSong.lyric
    }
}

또, 다음과 같은 에러가 발생합니다.

instance member x cannot be used on type x. 

이는 "class" 키워드를 사용하여 메서드를 할당하고(이를 통해 메서드가 유형 메서드가 됨) 다음과 같이 사용되기 때문입니다.

Album.getCurrentlyPlayingSongLyric(duration: 5)

전에 누가 playingSong 변수를 설정했을까요?네. 이 경우 class 키워드를 사용하면 안 됩니다.

 // ...

 func getCurrentlyPlayingSongLyric(duration: Int = 0) -> String {
        // ...
       return playingSong.lyric
 }

 // ...

이제 가도 좋아요.

초기 문제는 다음과 같습니다.

class ReportView: NSView {
  var categoriesPerPage = [[Int]]()
  var numPages: Int = { return categoriesPerPage.count }
}

인스턴스 멤버 'categoriesPerPage'는 'ReportView' 유형에 사용할 수 없습니다.

이전 게시물이 올바르게 지적되었습니다.계산 속성을 원할 경우,=부호가 틀렸습니다.

기타 오류 가능성:

"폐쇄 또는 함수를 사용하여 기본 속성설정"을 의도한 경우 이 값도 약간만 변경하면 됩니다(주의: 이 예제는 분명히 그렇게 의도하지 않았습니다).

class ReportView: NSView {
  var categoriesPerPage = [[Int]]()
  var numPages: Int = { return categoriesPerPage.count }()
}

를 삭제하는 대신=, 추가하다()기본 초기화 마감을 나타냅니다.(이는 UI 코드를 초기화할 때 모든 코드를 한 곳에 보관하는 데 유용합니다.)

다만, 같은 에러가 발생합니다.

인스턴스 멤버 'categoriesPerPage'는 'ReportView' 유형에 사용할 수 없습니다.

문제는 어떤 속성을 다른 속성 값으로 초기화하려고 하는 것입니다. 번째 입니다.lazy 값에 액세스할 때까지 실행되지 않습니다.

class ReportView: NSView {
  var categoriesPerPage = [[Int]]()
  lazy var numPages: Int = { return categoriesPerPage.count }()
}

이제 컴파일러는 행복합니다!

를 에러 .static솔루션:빌드 정리, 파생 데이터 정리, Xcode 재시작.또는 바로 가기 cmd + Shift + Alt + K

UserNotificationCenterWrapper.delegate = self

public static var delegate: UNUserNotificationCenterDelegate? {
        get {
            return UNUserNotificationCenter.current().delegate
        }
        set {
            UNUserNotificationCenter.current().delegate = newValue
        }
    }

만약 누군가가 정말로 그와 같은 결말이 필요한 경우, 다음과 같은 방법으로 처리할 수 있습니다.

var categoriesPerPage = [[Int]]()
var numPagesClosure: ()->Int {
    return {
        return self.categoriesPerPage.count
    }
}

언급URL : https://stackoverflow.com/questions/32351343/instance-member-cannot-be-used-on-type

반응형