본문 바로가기
IOS (Swift, Objective-c)

[IOS] Pass Data from Objective-C  to Swift

by bryan.oh 2019. 8. 16.
반응형

 

Objective-C  에서 Swift 로 데이터 전달
ViewController pass data to swift from Objective-C

 

이전 글에서 Objective-C 프로젝트에서 Swift 파일을 생성하여
ViewController 를 호출하는 예제를 해봤습니다.
2019/08/15 - [IOS (Swift) 개발 기초편 xcode] - [IOS] Objective-C Controller에서 Swift Controller 호출하기

 

[IOS] Objective-C Controller에서 Swift Controller 호출하기

Objective-c ViewController -> Swift ViewController Objective-C 로 생성한 컨트롤러에서 Swift 컨트롤러를 호출하는 예제 입니다. XCODE 실행 Team 선택하시고. 일단 Language는 Objective-C 를 선택합니다. M..

hello-bryan.tistory.com

데이터를 전달하지 않는 단순한 컨트롤러 호출 예제였습니다.

 

이번엔 Data 를 전달하도록 해보겠습니다. 단순한 String Data 입니다.

일단 저번 글에서 버튼을 드래그 해서 Segue를 설정하는 부분을 변경해야합니다.

 

이전 글 중간부터 이어서 합니다.

버튼으로 직접 Segue를 설정했던 부분을 삭제합니다.

(혹시 위 방법으로 삭제가 안된다면 아래 캡쳐와 같은 방법으로 삭제가 가능합니다.)

 

 

그리고 아래와 같이 Controller 아이콘에서 Ctrl + 드래그를 해서 Target Controller 에 드랍 합니다.
(맥북인 경우 키패드를 두손가락으로 눌러서 드래그 해도됩니다.)

 

그리고 Show
(꼭 show를 할 이유는 없습니다. 상황에 맞게 옵션을 선택하면 됩니다.)

 

Segue 의 ID를 정합니다. 여기에 설정한 텍스트로 코드에서 사용하게 됩니다. 
(제마음대로) o2sSegue 라고 입력하겠습니다.

 

호출 하려는 컨트롤러(Objective-C Controller)의 버튼에 Action 을 설정하기 위해서 아래와 같이 합니다.
(드래그가 아니고 Objective-C ViewController 를 한번 선택하고 우측 상단의 저 버튼을 누릅니다.)

 

이 뷰컨트롤러에 매칭되는 소스 컨트롤러를 선택해줍니다.

 

그리고 해당 소스로 버튼을 Ctrl+드래그 or 키패드 두손가락 터치 드래그로 소스코드위치에 드랍합니다.
클래스 안으로 해야겠죠.,

 

Method Name 과 Type을 선택하고 Connect 를 클릭합니다.

 

IBAction 이 생성되는데 그 안에 내용을 아래와 같이 타이핑 하고
prepareForSegue 메소드를 추가해줍니다. Segue를 호출하게 되면 prepareForSegue를 호출하게 됩니다.

아직은 위와 같은 오류가 납니다.

SwiftViewController 를 찾을 수 없고 그 클래스에 data 라는 property를 찾을 수 없기 때문입니다.

일단 SwiftViewController를 찾을 수 없는 건, Header File을 import 해주면 해결됩니다.

#import "ObjcWithSwift-Swift.h"

#import "{projectName}-Swift.h"  형식으로 입력하면 됩니다. 
실제로 저 파일이 없어도 상관없습니다.

 

음, 그리고 Swift Controller 에서 데이터를 받은 것을 표시해주기 위해 Label 의 값을 변경시킬 겁니다.
그러기 위해서 Label 도 소스로 바인딩 시켜야겠죠.

class 내부로 드래그 드랍.

label id(=name) 설정, Connect

 

그럼 소스에 IBOutlet 이 생성됩니다. 이게 Label 의 ID 입니다.
Data를 받아올 스트링 변수를 하나 생성합니다.
var data:String = ""

viewDidLoad() 에 label 의 text 를 바꾸는 코드가 있습니다.
그런데 위 코드만 봐서는 data 변수의 값이 "" 이겠네요. 
하지만~ 이 data 의 값은 호출하는 Objective-C Controller 에서 변경해줄겁니다.

data property를 생성했으니 ViewController.m 으로 다시 가봅시다.

여전히 오류가 있네요.

원인은 Objective-C 에서 Swift class 를 참조하려면 annotation이 필요합니다.
그게 @objc 입니다.

아래와 같이 추가합니다.

 

그리고 실행!

 

 

Go to Swift Page 를 클릭하면~

 

저렇게 data 를 넘기게 됩니다.

 

 

728x90
반응형

댓글