스위프트로 엠베드 프레임워크를 만들 때는 퍼블릭, 인터넷, prive를 잘 써야 한다.

6262 단어 XcodeSwift

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.swift
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
    }
}
FrameObject의 속성은 접근할 수 있지만 접근할 수 없음publicinternal.
다음에는 같은 모듈private에서 만들어 보세요.
SwiftFrame/FrameObject.swift
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
    }
}
이번에 방문할 수 있다FrameObject.물론 이 경우에도 방문할 수 없다internal.

보통 당연한 거죠?

privte 액세스


위의 FrameObject 클래스를 호출하려는 소스 파일에 정의된 경우 private에 액세스할 수 있습니다.

같은 모듈, 같은 파일 안에 있으면 접근할 수 있습니다.

다른 모듈에서 같은 이름의 클래스가 있을 때


다른 모듈에 존재하는 클래스와 같은 클래스를 정의하면 어떻게 될까요?

일지를 주목해 주세요.
모듈을 구조기라고 지정할 때 해당 모듈의 종류를 호출합니다.
모듈이 지정되지 않으면 자신의 모듈에서 찾고, 일치하는 종류가 있으면 사용합니다.

총결산


그러고 보니 스위프트가 처음 나왔을 때 베타가 방문을 통제하지 않았네요.전혀 따라가지 못했다.

좋은 웹페이지 즐겨찾기