스위프트로 엠베드 프레임워크를 만들 때는 퍼블릭, 인터넷, prive를 잘 써야 한다.
Swift로 Embed Framework 만들기
자신의 앱인 왓치키트에 대응하면서 코드를 제대로 공통화해야 할 만큼 차이가 나지 않으면 오류가 발생해 빠져들기 때문에 필기를 해야 한다.
오류 발생
프로젝트의 구성은 이렇다.Extension은 제작되지 않았으며, Embed Framework의 Frame Kit 및 솔리드로서의 적용 대상인 Swift Frame만 있습니다.
다만 프레임키트에 이런 종류FrameObject
가 추가됐다.
그리고 이걸 사용하려면 "Useof unresolved identifierFrameObject
"오류가 발생하여 컴파일을 통과할 수 없습니다.
액세스 제어
액세스 제어 때문입니다.
Swift는 모듈과 소스 파일을 액세스 제어 단위로 합니다.
액세스 수준
용도
public
어디서나 액세스 가능
어디서든 접근할 수 있기 때문에 프레임워크의 API를 정의할 때 사용합니다
internal
기본 액세스 수준
자체 모듈과 같은 모듈의 원본 파일 안에 있으면 접근할 수 있습니다.아무것도 지정하지 않으면 이걸 지정해.
private
가장 엄격한 액세스 수준
모듈 내의 동일한 원본 파일이어야만 접근할 수 있습니다.외부에 숨겨진 물건을 지정하려면 이것을 지정하십시오.
Swift는 프로젝트 내의 목표를 모듈로 처리합니다.위FrameObject
는 액세스 등급을 지정하지 않았기 때문에 지정된 상태에서만 읽을 수 있습니다. 즉, 모듈 내에서만 읽을 수 있습니다.
SwiftFrame 대상에서 이 기능을 사용하려면 모듈 외부에서 읽어야 합니다internal
.Objective-C에 쓸 때는 "공개만 하고 나중에 헤더 파일에 쓰면 된다"는 느낌이어서 주의해야 한다.
따라서 FrameObject
를 지정하면 오류가 발생하지 않습니다.
처음에는 유명에 public
를 더하면 문제없을 줄 알았지만 속성은 말할 것도 없고 방법명도 방문 등급에 대한 기술을 써야 한다.
속성에 대해 각각 다른 접근 레벨을 설정해 보십시오.방금 엠베데드 프레임워크에서 제작된public
클래스는 이런 느낌으로 설정됐다.
Framekit/FrameObject.swiftpublic class FrameObject: NSObject {
public var publicName: String
internal var internalName: String
private var privateName: String
public init(publicName:String, internalName:String, privateName:String) {
self.publicName = publicName
self.internalName = internalName
self.privateName = privateName
}
}
FrameObject
의 속성은 접근할 수 있지만 접근할 수 없음public
과 internal
.
다음에는 같은 모듈private
에서 만들어 보세요.
SwiftFrame/FrameObject.swiftpublic class FrameObject: NSObject {
public var publicName: String
internal var internalName: String
private var privateName: String
public init(publicName:String, internalName:String, privateName:String) {
self.publicName = publicName
self.internalName = internalName
self.privateName = privateName
}
}
이번에 방문할 수 있다FrameObject
.물론 이 경우에도 방문할 수 없다internal
.
보통 당연한 거죠?
privte 액세스
위의 FrameObject 클래스를 호출하려는 소스 파일에 정의된 경우 private
에 액세스할 수 있습니다.
같은 모듈, 같은 파일 안에 있으면 접근할 수 있습니다.
다른 모듈에서 같은 이름의 클래스가 있을 때
다른 모듈에 존재하는 클래스와 같은 클래스를 정의하면 어떻게 될까요?
일지를 주목해 주세요.
모듈을 구조기라고 지정할 때 해당 모듈의 종류를 호출합니다.
모듈이 지정되지 않으면 자신의 모듈에서 찾고, 일치하는 종류가 있으면 사용합니다.
총결산
그러고 보니 스위프트가 처음 나왔을 때 베타가 방문을 통제하지 않았네요.전혀 따라가지 못했다.
Reference
이 문제에 관하여(스위프트로 엠베드 프레임워크를 만들 때는 퍼블릭, 인터넷, prive를 잘 써야 한다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/motokiee/items/d895aaa77476e312b9c5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public class FrameObject: NSObject {
public var publicName: String
internal var internalName: String
private var privateName: String
public init(publicName:String, internalName:String, privateName:String) {
self.publicName = publicName
self.internalName = internalName
self.privateName = privateName
}
}
public class FrameObject: NSObject {
public var publicName: String
internal var internalName: String
private var privateName: String
public init(publicName:String, internalName:String, privateName:String) {
self.publicName = publicName
self.internalName = internalName
self.privateName = privateName
}
}
Reference
이 문제에 관하여(스위프트로 엠베드 프레임워크를 만들 때는 퍼블릭, 인터넷, prive를 잘 써야 한다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/motokiee/items/d895aaa77476e312b9c5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)