2016-12-15 2 views
0

У меня есть проект «MyProject», которые используют CocoaPod «MyPOD», в PODFile у меня есть:Swift 3 | Получить текущий класс проекта в CocoaPod

pod 'MyPod', :path => '~/Desktop/iOS/MyPod' 

В моем проекте «MyProject» У меня есть класс MyClass. Я хотел бы сделать в моем CocoaPod «MyPOD» =>

MyClass.myFunc() 

Конечно, не работает, так как «MyPOD» не знает «MyProject», но есть способ сделать это? Могу ли я передать экземпляр этого класса или что-то еще?

TY

ответ

0

Вы можете создать публичный протокол в вашем стручка, передать тип что-то, который реализует протокол к способу, и MyClass реализовать его в проецировании.

Таким образом, в вашем стручка:

public protocol MyFuncType { 
    static func myFunc() 
} 

public func f(type: MyFuncType.Type) { 
    type.myFunc() 
} 

реализация MyFuncType в проецировании:

class MyClass: MyFuncType { 
    static func myFunc() { 
     // implement 
    } 
} 

Используйте метод, как это.

f(type: MyClass.self) 

Сообщите мне, если вам нужно более подробное объяснение. Удачи!

+0

Спасибо за ваш ответ, я думаю, вы поняли, в чем моя проблема. Btw Я не могу использовать 'f (type: MyClass.self)', поскольку MyPod не знает MyClass! Или я что-то испортил? – Aximem

+0

Ну, вы называете 'f' внутри своего проекта, а не внутри своего контейнера. Ваш модуль может работать только со своими собственными объектами и типами, а те, которые передаются ему из проекта, который его использует. Протокол позволяет вашему модулю знать, что тип имеет метод myFunc, но он не знает, как именно он находится в MyClass, так как он объявлен вне вашего контейнера. Вам просто нужно поместить все методы, которые вы хотите вызвать внутри своего модуля в общедоступном протоколе. – timaktimak

+0

Хорошо, спасибо, я понимаю, моя проблема в том, что я буду использовать множество контейнеров. Все они должны будут вызвать функцию f. Я не могу объявить протокол во всех моих контейнерах, и я также не могу вызвать f из проекта. Я думаю, что я отказываюсь от этого, я ищу несколько дней, и я не могу найти способ проуперировать это. Спасибо, в любом случае ;) – Aximem

Смежные вопросы