【问题标题】:SDK: iOS static library implementationSDK:iOS静态库实现
【发布时间】:2020-07-02 12:50:48
【问题描述】:

我目前正在开发将所有网络与我的后端封装在一起的 SDK。我尝试根据UML制作一个类:

但在共享实例方面遇到了困难。我想这是一个单例实例,我做了一个像:

public class MIDNetwork {

/// Class sigleton instance
static public let sharedManager:MIDNetwork = MIDNetwork()

但我不明白为什么我不能通过共享实例调用类的方法。我在测试项目中导入我的静态库并尝试调用这样的方法:

func handleRequest() {
    self.request = MIDNetwork.sharedManager.
    
}

这是我的课:

    public class MIDNetwork {
    
    /// Class sigleton instance
    public static let sharedManager:MIDNetwork = MIDNetwork()
    
    /// A network session
    private var networkSession:URLSession = URLSession(configuration: .default)
    
    ///baseUrl is represented as an API endpoint
    private static var baseUrl:URL = URL(string: "")!
    
    // TODO: - Somehow figure out a client url
    private var clientUrl:URL {
        return self.clientUrl
    }
    
    func createRootIdentity(requestDataMode:MIDCreateRootIdentityRequest, handler: @escaping (APIResult<MIDIdentity>) -> Void) -> URLSessionTask? { }

    func createDerivedIdentity(requestDataMode:MIDCreateDerivedIdentityRequest, handler: @escaping (APIResult<MIDDerivedIdentity>) -> Void) -> URLSessionTask? { }
    
    func faceCheck(requestDataMode:MIDFaceCheckRequest, handler: @escaping (APIResult<MIDFaceCheckResult>) -> Void) -> URLSessionTask? { }
    
    func getIdentityAdditionalInfo(derivedIdentityID:String, handler: @escaping (APIResult<MIDDerivedIdentityAdditionalInfo>) -> Void) -> URLSessionTask? { }
}

我尝试使用 public 标记方法,但之后出现错误:

方法不能被声明为公共的,因为它的参数使用了一个内部类型

谁能解释我在哪里犯了错误?感谢您的回答,谢谢!

【问题讨论】:

    标签: ios swift class sdk encapsulation


    【解决方案1】:

    如果你得到错误,你必须声明你的公共方法

    方法不能被声明为公共的,因为它的参数使用了一个内部类型

    这意味着你的参数之一是不公开的

    例如对于函数:

    func createRootIdentity(requestDataMode:MIDCreateRootIdentityRequest, handler: @escaping (APIResult<MIDIdentity>) -> Void) -> URLSessionTask? { }
    

    MIDCreateRootIdentityRequestAPIResultMIDIdentity 是公开的吗?

    函数依赖于参数,所以要么所有东西都被声明为公共的,要么你不能使用它

    【讨论】:

    • 一切都是公开的,这让我很困惑。
    【解决方案2】:

    问题出在: - public typealias APIResult = Result 因为它被声明为没有 public 的 typealias。谢谢大家!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2015-07-03
      • 2020-01-26
      相关资源
      最近更新 更多