Расширение класса Public для частичного публичного доступа в Swift - PullRequest
2 голосов
/ 26 июня 2019

Я работаю над платформой Swift, в которой большинство файлов Swift и очень мало файлов Objective C.Поскольку я не хочу, чтобы мои файлы Objective-C были доступны вне SDK и даже не в папке заголовков, я предоставил им доступ к проекту и теперь использую их внутри с картой модуля.

Вот как выглядит мой файл карты модулей:

module MySDKPrivate {

    header "CardDetails.h"
    export *
}

Теперь, чтобы получить доступ к этому файлу CardDetails, мне просто нужно импортировать модуль MySDKPrivate в требуемый класс Swift.Пока все хорошо.

Теперь, допустим, у меня есть класс public с именем Payment.swift.Этот класс отвечает за выполнение операций SDK, частично скрытых для пользователя, поэтому он находится под доступом project, поэтому он не отображается в заголовках при распространении SDK.

Существуют некоторые методы, такие какauthenticate и getSessionExpireDate, к которым обращается класс 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 и внутри project доступ для заголовков, потому что, если я сделаю его общедоступным под заголовками, пользователь SDK увидит имя моей карты модулей и весь код в классе Payment и сможет также использовать файлы target-c симпорт карты модуля.Несмотря на то, что теперь и название карты модулей появляется в «Авто-справке», но, по крайней мере, оно не отображается напрямую.

Я все еще думаю, что может быть лучший способ ввода данных в публичный класс и из него, который скрывает мои данные.Имя модуля ИЛИ Скрытие файлов Objective-C может быть сделано лучше.Если да, пожалуйста, помогите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...