인스턴스 멤버를 형식에 사용할 수 없습니다.
저는 다음과 같은 수업이 있습니다.
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
'programing' 카테고리의 다른 글
Microsoft Office Excel에서 'c:\inetpub\wwwroot\' 파일에 액세스할 수 없습니다.타임시트\App_Data\템플릿xlsx' (0) | 2023.04.10 |
---|---|
서버와의 접속은 정상적으로 확립되었지만, 로그인 프로세스중에 에러가 발생했습니다.(에러 번호: 233) (0) | 2023.04.10 |
클라이언트 IP 주소의 최대 길이 (0) | 2023.04.10 |
키/값 쌍의 파일에서 환경 변수 설정 (0) | 2023.04.10 |
WPF 이미지 리소스 저장 (0) | 2023.04.10 |