Я работаю над платформой 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 может быть сделано лучше.Если да, пожалуйста, помогите!