[Swift4] Object-C 프로젝트에서 Swift 코드 객체 상호 호출
개발/iOS - Swift 2018. 8. 14. 14:14저번 포스팅에 이어서 이번에는 상호 객체 호출하는 방법에 대해서 포스팅하도록 하겠습니다.
기본적으로 Swift 문법은 알고 있다고 생각하고 생성자, 객체 검사 등 설명은 패스하도록 할께요.
Object-C & Swift 셋팅이 설명되어 있는 이전 포스팅을 보지 못했다면 아래 링크로 가셔서 보시면 됩니다.
[Swift4] Object-C 프로젝트에서 Swift 코드 사용하기
1) Object-C 코드
Object-C 프로젝트를 생성하면 AppDelegate가 만들어 집니다. 여기서 Swift 객체를 사용해보도록 하겠습니다.
일단 Object-C 코드를 먼저 살펴 본 후에 Swift 코드도 살펴보도록 하겠습니다.
AppDelegate.m 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #import "AppDelegate.h" #import "SampleApp-Swift.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { MySwift *oSwift = [[MySwift alloc] init]; [oSwift testSwiftWithStr:@"1234"]; [oSwift getAppDelegateWith_obj:self]; return YES; } -(void)testObjc { NSLog(@"testObjec == "); } | cs |
2번 줄: 전 포스팅에서 "Product Name" 잘 기억하라고 했었죠?
"[Product Name]-Swift.h" 를 작성하시면 됩니다.
그러면 모든 Swift 코드가 Import 됩니다.
(Swift는 애플에서 만든 SDK를 제외하고 Import 를 안해도 모두 공유가 됩니다. )
13~14 번 줄: Swift Class 인 "MySwift" Class를 선언 & 생성 하고 Swift에 선언된 메소드를 호출 합니다.
15 번 줄: AppDelegate 객체를 Swift 에 넘겨 줍니다. 그래서 반대로 호출 할 수 있도록 해줍니다.
20 번 줄: testObjc는 Swift에서 호출 할 메소드로 헤더에도 선언해 줍시다.
2) Swift 코드
MySwift.swift 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import Foundation @objc (MySwift) class MySwift : NSObject { func testSwift(str:String) -> Void { print("MySwift : \(str)") } func getAppDelegate(_obj:Any?) -> Void { if let obj = _obj as? AppDelegate { obj.testObjc(); } } } | cs |
3 번 줄: @objc 를 선언해줌으로써 Object-C 에서도 호출 가능하도록 설정합니다.
11 번 줄: "1) 에 15 번줄"이 호출 되면 MySwift의 getAppDelegate가 호출 됩니다.
Object-C 에서 인텔리전트가 나오지 않는다면 빌드(Cmd+B)를 한 후 해보시면 인텔리전트가 나올껍니다.
15 번 줄: AppDelegate의 testObjc 메소드를 호출합니다.
자~ 여기까지 입력하시고 컴파일 해보면 아래 이미지처럼 에러가 나실껍니다.
이유는 AppDelegate를 못찾기 때문입니다. 전 포스팅에서 Bridge 헤더 만들겠냐고 팝업떠서 만든거 기억하시죠?
여기에다가 Import 해줘야 인식을 하게 됩니다.
위 이미지처럼 Import 해주시고 컴파일하면 정상적으로 컴파일이 되고 실행도 되실껍니다.
3) 실행 결과
어떤가요? 동일하게 로그가 출력 되었나요?
'개발 > iOS - Swift' 카테고리의 다른 글
[Swift4] JSONSerialization을 이용한 JSON Parsing (0) | 2018.08.29 |
---|---|
[Swift4] try catch 예외사항 커스텀에러 정의하기 (0) | 2018.08.21 |
[Swift4] try catch 예외사항 처리방법 (0) | 2018.08.21 |
[Swift4] String Length 가져오기 (0) | 2018.08.17 |
[Swift4] Object-C 프로젝트에서 Swift 코드 사용하기 (0) | 2018.08.14 |
[Swift4] String을 Int 로 변환 (0) | 2018.08.08 |