2017-09-29 1 views
0

swift 클래스에 선언 된 Objective-C 클래스의 Public 변수에 액세스하려고합니다. 하지만 "알 수없는 메서드"오류가 나타납니다. 이 오류 컴파일을 보여줍니다Objective-C에서 Swift Class Public 변수에 액세스 Xcode 9

NSLog(@"job on quick blox : %@",[QuickBloxJobClass jobOnQB]); 

과 : 여기

No known class method for selector 'jobOnQB'

을 그리고 QuickBloxJobClass 내 코드는 다음과 같습니다

@objc public class QuickBloxJobClass: NSObject 
{ 
    static var jobOnQB: QBCOCustomObject = QBCOCustomObject() 
} 

나는 그것이 공용 변수 때문에 할 수 없습니다 여기에 접근 변수에 대한 내 코드입니다 QuickBloxJobClass에 Class 메소드가 있습니다. 심지어 나는 QuickBloxJobClass에 대한 변수를 만들어 그것을 시도했다. 그러나 변수는 여전히 접근 할 수 없었다. Xcode에서 잘 작동했습니다.

몇 가지 해결책을 제안 해주세요. jobOnQB는 공개 할 수없는 이유

답변

1

잘 모르겠어요, class 방법의 존재는 공공 것을 방해하지 않아야하지만, 어떤 이유로 공개 할 수없는 경우, 당신은 변수를 얻기 위해 QuickBloxJobClass에 정적 메소드를 추가 할 수 있습니다.

알아두기 [QuickBloxJobClass jobOnQB]QuickBloxJobClass 클래스의 정적 메서드 jobOnQB을 호출하기위한 것입니다 (비록 작동합니다). 그러나 엄밀히 말하면 jobOnQB이 속성이므로 더 나은 Objective-C 구문은 QuickBloxJobClass.jobOnQB이됩니다.

또 다른 관찰은 Swift 4에서 @objc 추론이 더 이상 사용되지 않으므로 스위프트에서 호출 할 수있는 Swift 메서드와 속성을 @objc으로 명시 적으로 표시하는 것이 좋습니다. 사실 Swift 3 @objc inferenceOff으로 설정된 경우이를 수행해야합니다.

업데이트 : 추가 조사가 필요하며 일부 설정에서만 문제가 될 수 있습니다. 처음에 Objective-C로 설정된 프로젝트에 Swift 코드를 추가하면 설명 된 동작을 얻을 수 있지만 Swift에서 정의 된 내부 멤버는 Objective-C로 Swift에서 프로젝트를 처음 설정하면 Objective-C에서 제대로 액세스 할 수 있습니다 나중에 추가 된 파일. 다시 Swift 3 @objc 유추가 비활성화 된 경우에도 해당 멤버를 @objc으로 표시해야합니다.

업데이트 2 :이 액세스 문제는 처음에 Objective-C에서 설정 한 프로젝트에서 브리징 헤더를 추가하여 해결할 수 있습니다. 그런 다음 브리징 헤더의 목적이 반대 인 경우에도 내부 Swift 멤버가 Objective-C에서 표시됩니다. Objective-C를 Swift에서 볼 수있게 만듭니다.

+0

감사합니다. @ OmniProg. 그것은 효과가 있었다. –

+0

iOS 11에 대한 다른 질문이 있습니다. https://stackoverflow.com/questions/46468044/storyboard-issue-in-code-9-text-overlapping-each-other ... 질문을 올렸습니다. 도와 주실 수 있습니까? 이에 ? –

+0

죄송합니다, 수실, 무슨 일이 일어나고 있는지 모르겠다. 나는 GUI 전문가가 아니다. :(하지만이 질문에 대한 업데이트가 있습니다, 위에 참조하십시오. – OmniProg

관련 문제