在Swift中扩展Public类以实现部分公共访问

时间:2019-06-26 09:18:02

标签: ios objective-c swift cocoa

我正在开发一个Swift框架,该框架包含大多数Swift文件和很少的Objective C文件。由于我不希望我的Objective-C文件在SDK之外,甚至不在headers文件夹下,因此我为它们提供了项目访问权限,现在在内部将它们与模块映射一起使用。

这是我的modulemap文件的外观:

module MySDKPrivate {

    header "CardDetails.h"
    export *
}

现在,为了访问此CardDetails文件,我只需要在所需的Swift类中导入MySDKPrivate模块。到这里一切都很好。

现在,假设我有一个名为public的{​​{1}}类。此类负责执行部分对用户隐藏的SDK操作,因此它受Payment.swift访问,因此在分发SDK时,它不会显示在标题中。

project类可以访问诸如authenticategetSessionExpireDate之类的某些方法,这些方法基本上不过是PaymentDoor.swift类的扩展,用于部分读取&编写注入,有助于获取/退出Payment类的次要信息。这是Payment

的示例签名
PaymentDoor.swift

这是//Extension to inject data in and out of the Internal Payment.swift public extension Payment{ }

Payment.Swift

这是为什么我想将此import MySDKPrivate public class Payment { let username: String let password: String let cardDetails: CardDetails public init(userName: String, password: String, cardNumber: String) { self.username = userName self.password = password let cardDetails = CardDetails() cardDetails.cardNumber = cardNumber self.cardDetails = cardDetails } public func authenticate() -> Bool{ //Some logic return true } private func generateAuthkey(){ //Should not be accessible with the extension } } 类保留为Payment,并在public内部保留标题的另一个原因,因为如果我在标题下将其公开提供,则SDK用户会请参阅我的modulemap的名称以及Payment类中的所有代码,并且在导入模块图时也可以使用Objective-C文件。虽然现在自动帮助还会显示模块映射的名称,但至少它不直接可见。

我仍然认为,有一种更好的方法可以将数据注入到公共类中或从公共类中插入,这会隐藏我的模块名称,或者可以更好的方式隐藏Objective-C文件。如果是,请帮忙!

0 个答案:

没有答案