Как вызвать методы инициализации Swift с несколькими параметрами в Objective C

В моем файле Swift есть метод One Initializer, как показано ниже:

public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) {
        self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE
        self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR
        self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING
        super.init(frame: frame)
        isHidden = true
}

Я хочу вызвать этот метод из моего файла Objective-C, но его ошибка при компиляции.

Ошибка:

/Users/Desktop/старый data/ChatScreenViewController.m: 396: 92: нет visible @interface для 'NVActivityIndicatorView' объявляет селектор 'InitWithFrame: Тип: Цвет: набивка:'

Телефонный код Obj-C:

NVActivityIndicatorView *objNVActivityIndicatorView = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) type:NVActivityIndicatorTypeLineScalePulseOut color:[UIColor blueColor] padding:10]

Что я пробовал:

Добавлен @objc в мой быстрый класс

@objc public final class NVActivityIndicatorView: UIView

Все еще не могу получить доступ к вышеуказанному методу.

Мой файл Swift: NVActivityIndicatorView.swift

Есть идеи, что не так?

Заранее спасибо!

+6
источник поделиться
3 ответа

  Чтобы быть доступным и пригодным для использования в Objective-C, класс Swift должен быть потомок класса Objective-C или он должен быть помечен как @objc.

А также этот ответ.

Этот документ Apple также поможет вам понять.

Поэтому вы можете либо унаследовать свой класс от некоторого класса Objective C (в этом случае компилятор добавляет @objc), либо добавить @objc в свой класс.

Вы также должны добавить к своей цели C class-

#import "<#ProjectName#>-Swift.h"

Реальное решение этого конкретного вопроса

Пожалуйста, посмотрите на этот вопрос, вы получите свое решение самостоятельно. :)

Этот вопрос говорит о том, что optional parameters нельзя выставить из Swift в Objective C, так как все параметры становятся _Nonnull.

Поэтому я думаю, что вам нужно будет создать еще один инициализатор без дополнительных параметров и параметров по умолчанию.

+6
источник
+3
источник
другие ответы

Связанные вопросы


Похожие вопросы

Попробуйте добавить класс @objc в класс Swift в фазах сборки → Скомпилировать источник и снова вызвать метод. Я надеюсь, что это сработает.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос