Как просмотреть сигнатуры методов, когда Objc-C соединен со Swift и наоборот? - PullRequest
0 голосов
/ 03 апреля 2019

Если у меня есть некоторый код Obj-C, и я вызываю его из кода Swift, или у меня есть какой-то код Swift, который я вызываю из Objective-C.Тогда как я могу увидеть, как выглядит сигнатура метода для них.

Я делал это раньше и помню, что существует сгенерированный Xcode заголовок моста, который содержит сигнатуры метода моста.Но сейчас я просто не могу этого найти.Кажется, я помню, как он генерировался в папке производных данных, но я просто нигде не могу его найти.

Спасибо

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Чтобы увидеть, как интерфейс Objective C импортируется в Swift, выберите файл заголовка и выберите «Сгенерированный интерфейс» из кнопки «Связанные элементы»:

enter image description here

Пример: OClass.h:

NS_ASSUME_NONNULL_BEGIN

@interface OClass : NSObject

- (void)bar:(NSString *)string;

@end

NS_ASSUME_NONNULL_END

Сгенерированный интерфейс:

open class OClass : NSObject {
    open func bar(_ string: String)
}

Чтобы увидеть, как класс Swift отображается в Objective-C, выберите файл Swift ивыберите «Сгенерированный интерфейс ->« ProjectName.h »из кнопки« Связанные элементы »:

enter image description here

Пример:« SClass.swift »

class SClass: NSObject {
    @objc func foo() {

    }
}

"MyProject-Swift.h":

// ...
SWIFT_CLASS("_TtC9MyProject6SClass")
@interface SClass : NSObject
- (void)foo;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
// ...
0 голосов
/ 03 апреля 2019

Objc to swift

Перейдите к своей цели -> BuildSettings -> (найдите «Соединение Objective-C») YouProjectBridging.h Добавьте ваши другие .h файлы с помощью #import "OtherVisible.h" в "YouProjectBridging.h"

Swift to Objc

В каждом файле .h, где вы хотите использовать swift-код. После импорта добавьте строку @class MySwiftClass;"

В файле .m после импорта добавить строку

#import <YourProjectName-Swift.h>

Но сначала в классе swift, который вы хотите вызвать, должны быть установлены модификаторы доступа

@objc open class MyswiftClass

То же самое относится к его свойствам и функциям

 @objc public var button : UIButton!
 @objc public override func viewDidLoad() 
...