iOS/UIKit
[Swift] - preview 보는 법
강철곰탱이
2023. 12. 10. 22:52
uikit로 개발을 하게되면 단점이 cmd + R키를 눌러야 빌드를 할 수 있다는 거다.
ui를 수정하고 수정된 걸 확인하려면 시뮬레이터를 계속 돌려봐야 한다.
navigation controller로 연결된 마지막 ui를 확인하려하면 계속 넘어가야 한다.
SwiftUI는 코드를 만들면서 바로 옆에 preview를 볼 수 있다는 거!!!
uikit에서도 SwiftUI처럼 preview를 사용할 수 있다고 한다.
uikit에 preview 적용하는 법
✅ Preview사용 조건
- Xcode 11 이상
- iOS 13+
1️⃣ preview 적용 코드
루트 뷰를 설정해준다.
let rootViewController = "ViewController name"
import SwifiUI
struct MainViewController_Previews: PreviewProvider {
static var previews: some View {
Container().edgesIgnoringSafeArea(.all)
}
struct Container: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
let rootViewController = ViewController() // ViewController name
return UINavigationController(rootViewController: rootViewController)
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}
typealias UIViewControllerType = UIViewController
}
}
2️⃣ preview 적용
uikit 코드 밑에 다음과 같이 넣어준다.
그런 다음 preview 실행 단축키인 option + cmd + enter 키를 눌러주면 실행된다.
꼭 SwiftUI를 import 해줘야한다~~~!!
import SwiftUI
import UIKit
class MainViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
code...
}
}
// MARK: - Preview
struct MainViewController_Previews: PreviewProvider {
static var previews: some View {
Container().edgesIgnoringSafeArea(.all)
}
struct Container: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
let rootViewController = MainViewController()
return UINavigationController(rootViewController: rootViewController)
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}
typealias UIViewControllerType = UIViewController
}
}
3️⃣ preview 실행
코드 수정 후 preview 새로고침은 option + cmd + p 키를 눌러준다.

extension으로 preview 사용
위의 예제는 한 VC에서 preview를 적용하는 경우로 다른 VC에도 계속해서 코드를 작성해야 하는 불편함이 있다.
여러 VC에 preview를 적용하고 싶은 경우 extension으로 간단하게 해결할 수 있다.
#if DEBUG
extension UIViewController {
private struct Preview: UIViewControllerRepresentable {
let viewController: UIViewController
func makeUIViewController(context: Context) -> UIViewController {
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}
func toPreview() -> some View {
Preview(viewController: self)
}
}
#endif
이렇게 확장자를 사용하면 다른 VC에서 preview를 사용해야하는 경우 훨씬 간단하게 코드를 작성할 수 있다.
▶️ 사용시
아래의 코드에 ViewController()대신 사용하고 싶은 VC를 넣어 사용한다.
struct PreView: PreviewProvider {
static var previews: some View {
ViewController().toPreview()//사용하고 싶은 VC 넣기
}
}
