Укажите метод компилятора Swift только как быстрый

У меня есть быстрый класс, определенный следующим образом:

      @objcMembers
public class MyURL: NSObject {

    func concat(_ components: String...) -> MyURL {
        concat(components)
    }

    /// Concat the specified components one by one.
    func concat(_ components: [String]) -> MyURL {
        components.forEach { let _ = value?.appendingPathComponent($0) }
        return self
    }

    // All the other methods which are available for objc.
}

Внутри есть много методов, доступных для objective-c, поэтому я использую префикс класса напрямую, а затем компилятор Swift начинает жаловаться на это:

Метод concat с селектором Objective-C concat: конфликтует с предыдущим объявлением с тем же селектором Objective-C

У них точно такая же сигнатура функции, но последняя доступна только для Swift, даже если она открыта. Теперь я ищу несколько флагов компиляции, чтобы отметить последнее. concatкак быстрый только для того, чтобы компилятор игнорировал ошибку конфликта.

@objc и @objcMembers сделать это явно, так как это сделать наоборот?

1 ответ

https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#nonobjc

«Nonobjc Примените этот атрибут к объявлению метода, свойства, индекса или инициализатора, чтобы подавить неявный атрибут objc. Атрибут nonobjc сообщает компилятору сделать объявление недоступным в коде Objective-C, даже если его можно представить в Objective-C.

Применение этого атрибута к расширению имеет тот же эффект, что и его применение к каждому члену этого расширения, который явно не отмечен атрибутом objc.

Атрибут nonobjc используется для разрешения цикличности для методов моста в классе, отмеченного атрибутом objc, и для разрешения перегрузки методов и инициализаторов в классе, отмеченном атрибутом objc.

Метод, отмеченный атрибутом nonobjc, не может переопределить метод, отмеченный атрибутом objc. Однако метод, отмеченный атрибутом objc, может переопределить метод, отмеченный атрибутом nonobjc. Точно так же метод, отмеченный атрибутом nonobjc, не может удовлетворять требованиям протокола для метода, отмеченного атрибутом objc ».

Другие вопросы по тегам