점진적 과부하 개발 블로그

Swift) UITabBarController와 TabView의 차이점 본문

Swift

Swift) UITabBarController와 TabView의 차이점

지용빡 2022. 6. 8. 22:56
반응형
UITabBarController와 TabView의 차이점
코드 비교
  • UIKit
import UIKit

class FirstViewController: UIViewController {}
class SecondViewController: UIViewController {}

class TabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let firstViewController = FirstViewController()
        firstViewController.tabBarItem = UITabBarItem(
            title: "첫번째 화면",
            image: UIImage(systemName: "person"),
            tag: 0
        )

        let secondViewController = SecondViewController()
        secondViewController.tabBarItem = UITabBarItem(
            title: "두번째 화면",
            image: UIImage(systemName: "person"),
            tag: 1
        )

        viewControllers = [firstViewController, secondViewController]
    }
}
  • SwiftUI
import SwiftUI

struct FirstView: View {
    var body: some View {
        Text("첫번째 탭")
    }
}

struct SecondView: View {
    var body: some View {
        Text("두번째 탭")
    }
}

struct SampleTabView: View {
    var body: some View {
        TabView {
            FirstView()
                .tabItem {
                    Image(systemName: "person")
                    Text("첫번째 화면")
                }
            SecondView()
                .tabItem {
                    Image(systemName: "person")
                    Text("두번째 화면")
                }
        }
    }
}
  • 두 코드를 비교해보면 SwiftUI가 UIKit에 비해 좀 더 직관적이고 읽는 순서대로 구현이 되어 알아보기 쉽다.
TabView 구현
import SwiftUI

struct MainTabView: View {
    var body: some View {
        TabView {
            Text("Home") // 각각 넣으면 유지보수의 어려움이 있기 때문에 별도의 enum으로 정의를 해둔다.
                .tabItem {
                    Image(systemName: "house.fill")
                    Text("Home")
                }
            Text("Ohter")
                .tabItem {
                    Image(systemName: "ellipsis")
                    Text("Other")
                }
        }
    }
}

struct MainTabView_Previews: PreviewProvider {
    static var previews: some View {
        MainTabView()
    }
}

 

  • 이렇게 바로 TabView에 각각 넣는 코드는 유지보수에 그닥 좋지 못해서 따로 enum을 정의해서 tabItem을 넣어주겠습니다.
import SwiftUI

enum Tab {
    case home
    case other
    
    // associate value : enum의 변수를 바로 리턴 시키는 것
    var tabTextItem: Text {
        switch self {
        case .home: return Text("Home")
        case .other: return Text("Other")
        }
    }
    
    var imageItem: Image {
        switch self {
        case .home: return Image(systemName: "house.fill")
        case .other: return Image(systemName: "ellipsis")
        }
    }
}

struct MainTabView: View {
    var body: some View {
        TabView {
            Text("Home") // 각각 넣으면 유지보수의 어려움이 있기 때문에 별도의 enum으로 정의를 해둔다.
                .tabItem {
                    Tab.home.imageItem
                    Tab.home.tabTextItem
                }
            Text("Ohter")
                .tabItem {
                    Tab.other.imageItem
                    Tab.other.tabTextItem
                }
        }
    }
}

struct MainTabView_Previews: PreviewProvider {
    static var previews: some View {
        MainTabView()
    }
}
  • enum은 따로 swift 파일을 만들어 넣어주면 더 깔끔한 코드를 작성할 수 있다.

반응형

'Swift' 카테고리의 다른 글

Swift HStack  (0) 2022.06.12
Swift List, LazyHStack 차이점 알아보기  (0) 2022.06.10
Swift UnitTest, Nimble 알아보기  (0) 2022.06.06
Swift Kakao API 연결하기  (0) 2022.06.02
Swift MVVM 알아보기  (0) 2022.05.29