Синтаксис для вызова метода Swift из класса Objective-C - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь вызвать некоторый код в файле утилит, написанный на swift из файлаjective-c.

Сейчас класс в файле swift выглядит следующим образом:

class ImageClass: NSObject {
public func imageFromString(name: String?) -> UIImage? {
//code to make image

return image
}
}

Я пытаюсь вызвать его из файла Objective-C с:

 UIImage *myImage = [ImageClass imageFromString:@"test"];

, однако это дает ошибку:

Use of undeclared identifier 'ImageClass'

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

Может кто-нибудь предложить правильный способ вызова кода?На самом деле мне все равно, класс это или через sharedInstance, мне просто нужно иметь возможность вызывать его.

Редактировать:

Как подсказывает @CharlesСрстка, я щелкнул CMD по файлу #import myapp.swift, перешел к Definition, и в заголовке показывается следующее:

- (UIImage * _Nullable)imageFromStringWithName:(NSString * _Nullable)name SWIFT_WARN_UNUSED_RESULT;

Соответственно, я попытался добавить WithName (который я забыл) ввызов, поэтому у меня есть:

 UIImage *myImage = [ImageClass imageFromStringWithName:@"test"];

, но я все еще получаю ошибку с или без @objc перед методом:

No known class method for selector 'imageFromStringWithName:'

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

В быстром 4.2

  1. Добавьте эту строку в ваш файл "* .m":

    #import "YourProjectName-Swift.h"
    
  2. Добавьте @objc перед вашимфункция:

    @objc public func imageFromString(name: String?) -> UIImage? {    
    //code to make the image
    return image
    }
    
  3. Вызовите его внутри класса Objective-C:

    ImageClass *imgObject = [[ImageClass alloc] init];   
    UIImage *myImage = [imgObject imageFromStringWithName:@"test"];
    
0 голосов
/ 03 февраля 2019

Добавьте эту строку в ваш файл Objective-C:

#import "YourProjectName-Swift.h"

Замените YourProjectName названием вашего проекта.Это сделает все Swift-классы, совместимые с Objective-C, в вашем проекте видимыми для вашего кода Objective-C.

Обратите внимание, что вам также необходимо добавить аннотацию @objc к вашим объявлениям func всделать методы видимыми для Objective-C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...