Swift: одна и та же функция в двух расширениях, разные модули - PullRequest
0 голосов
/ 04 июня 2018

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

Этот подход помогает значительно уменьшить зависимость от внешней библиотеки (чтобы заменить ее другой, мне потребуется только переписать функции вмост).Тем не менее, это немного сложно в случае расширений, так как я получаю бесконечный цикл с этим кодом:

// Library implementation, File1.swift
import Foundation
extension Date {
  func test(otherDate: Date) -> String {
    return String()
  }
}


// App reference to the library, different module, File2.swift
import Foundation
import Library
extension Date {
  func test(otherDate: Date) -> String {
    // How to reference "Library" here?
    return test(otherDate: otherDate)
  }
}

При добавлении префикса подход работает отлично:

// Works correctly:
import Foundation
import Library
extension Date {
  func prefix_test(otherDate: Date) -> String {
    return test(otherDate: otherDate)
  }
}

Есть ли способ в Swift вызвать метод расширения из определенного модуля, аналогично выбору класса :

// Selecting a class:
let a = Module1.CustomClass()
let b = Module2.CustomClass()

let date = Date()

// Can I select an extension method?
date.Module1.func1()
date.Module2.func1()

Чем этот вопрос отличается от «дубликата»: В случае функций класса можно сделать:

Module1.Class1.classFunction()
Module2.Class1.classFunction()

В вышеупомянутом случае такой вызов невозможен, поэтому возникает вопрос.

...