SwiftUI를 사용하면서 목표 OS를 iOS 11로 낮추는 AltSwiftUI에서 Hello, World

10801 단어 iOSSwiftSwiftUItech

환경 구조

  • Life Cycle은 SwiftUI App이 아니라 UIKit App Delegate가 프로젝트를 만든다
  • pod 설치 AltSwiftUI
  • $ pod init
  • Podfile에 추가pod 'AltSwiftUI'
  • $ pod install
  • .xcworkspace 프로젝트 파일 열기
  • 코드 수정


    AltSwiftUI를 가져오는 동안 발생한 오류 제거 작업

  • 편집ContentView.swift
  • 기존의 SwiftUI를 삭제하여 라이브러리 주체와 프로토콜을 import
  • 로 만듭니다.
    ContentView
    - import SwiftUI
    + import AltSwiftUI
    + import protocol SwiftUI.PreviewProvider
    + import protocol AltSwiftUI.View
    

  • 편집ContentView

  • 제거some 및 정의viewStore
  • ContentView
    struct ContentView: View {
    +   var viewStore = ViewValues()
    -   var body: some View {
    +   var body: View {
    	Text("Hello, world!")
    	    .padding()
        }
    }
    

  • 편집ContentView_Previews
  • AltPreviewProvider 추가 및 어댑터 계약
  • ContentView
    - struct ContentView_Previews: PreviewProvider {
    + struct ContentView_Previews: AltPreviewProvider, PreviewProvider {
    
    -   static var previews: some View {
    +   static var previewView: View {
    	ContentView()
        }
    }
    

  • 편집AppDelegate.swift
  • AltSwiftUI의 import
    AppDelegate
    + import AltSwiftUI
    
  • 다음 속성 정의
    AppDelegate
    + var window: UIWindow?
    + private var mainController: UIViewController?
    
  • 매개 변수에 d i d F inishLaunchingWithOptions가 있는 응용 함수에서 다음과 같은 내용을 설명한다.
    AppDelegate
    + window = UIWindow()
    + mainController = UIHostingController(rootView: ContentView())
    + window?.rootViewController = mainController
    + window?.makeKeyAndVisible()
    

  • 편집SceneDelegate.swift
  • 오류가 발생한 scene 함수에 대한 설명 또는 삭제 코드 블록
  • 지금까지 모든 오류가 제거되었으므로 구축을 통해서도 Preview
  • 를 볼 수 있습니다.

    시뮬레이터나 실제 기기로 이동하기 위한 추가 설정


    iOS 13 이후 에뮬레이터 또는 실제 시스템에서 어플리케이션을 시작할 때sceneDelegate.swift 다음 설정이 필요합니다.
  • AltSwiftUI의 import
    SceneDelegate
    + import AltSwiftUI
    
  • 다음 속성 정의
    SceneDelegate
    + var window: UIWindow?
    + private var mainController: UIViewController?
    
  • scene 함수에 다음 코드 추가
    SceneDelegate
    + if let windowScene = scene as? UIWindowScene {
    +     window = UIWindow(windowScene: windowScene)
    +     mainController = UIHostingController(rootView: ContentView())
    +     window?.rootViewController = mainController
    +     window?.makeKeyAndVisible()
    + }
    
  • 목표를 구축할 때 발생하는 오류 처리를 낮추다

  • Hello, World의 규모SceneDelegate가 클래스의 시작 줄에 추가@available(iOS 13.0, *)되면 파일 전체에 발생한 오류가 사라집니다
  • AppDelegate오류 발생 시 코드 설명

    iOS12.4개의 시뮬레이터로 프로그램 실행
  • 좋은 웹페이지 즐겨찾기