programing

Swift를 사용한 하위 클래스 UIA 애플리케이션

topblog 2023. 8. 26. 10:16
반응형

Swift를 사용한 하위 클래스 UIA 애플리케이션

목표 C에서는 단순했습니다: main.m 파일을 업데이트하고 UIApplicationMain() 매개 변수를 변경하기에 충분했습니다.

return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));

그러나 가이드가 말하기를 main.m 파일이 신속하게 없습니다.

"글로벌 스코프로 작성된 코드가 프로그램의 진입점으로 사용되므로 주요 기능이 필요하지 않습니다."

UIA 애플리케이션을 신속하게 하위 분류하는 방법은 무엇입니까?제안할 것이 있습니까?

참고 이전 구문을 찾고 있는 경우 2019년 6월에 XCode 10.1 및 Swift 5에 대한 구문이 업데이트되었습니다(여기서 매트의 답변 및 여기서 Tung Fam의 답변대한 크레딧). 편집 섹션을 참조하십시오.

좋아요, 해결책을 찾았어요

먼저, 저는 AppDelegate.swift 파일의 맨 위에 다음 줄이 있다는 것을 알게 되었습니다.

@UIApplicationMain

이 줄은 어떤 범위 밖에 있기 때문에(파일 수준에 있기 때문에) 즉시 실행되며, 컴파일러가 표준 주 함수로 변환한다고 가정합니다.

그래서 저는 새로운 Swift-Only 애플리케이션을 시작으로 이렇게 했습니다.

  • 코멘트 아웃된@UIApplicationMain
  • 이렇게 main.swift 파일을 추가했습니다(FLAP 애플리케이션은 내 하위 클래스입니다).
    중요: 최상위 명령문은 다른 파일에서 지원되지 않으므로 파일 이름은 main.swift여야 합니다!UIApplicationMain() 호출을 다른 파일에 추가할 수 없습니다. 그렇지 않으면 다음 오류가 표시됩니다.

최상위 수준에서는 식을 사용할 수 없습니다.

이것은 main.swift 파일입니다.

UIApplicationMain(
    CommandLine.argc, CommandLine.unsafeArgv, 
    NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)

그런 다음 UIApplication 하위 클래스인 FLApplication.swift에 대해 다음 코드를 사용하여 swift 파일을 만듭니다.

import UIKit
import Foundation

class FLApplication: UIApplication {
    override func sendEvent(_ event: UIEvent) {
        super.sendEvent(event)
        print("send event")
    }
}

이제 UIA 응용 프로그램이 올바르게 하위 분류되고 로그에 "이벤트 보내기" 메시지가 표시됩니다.


이전 편집
참고로 버전 1에서 버전 3으로 많이 변경되었기 때문에 이전 편집 내용은 모두 여기에 남깁니다.


편집 - 2015년 3월

Hu Junfeng에 의해 언급된 것처럼 지금에 대한 설명.UIApplicationMainmain.swift 파일은 The Swift Language Reference: 링크의 속성 섹션에 문서화되어 있습니다.

Thomas Verbeeek XCode 6.3 베타에서 C_ARGC 및 C_ARGV의 이름이 각각 Process.argc 및 Process.unsafeArgv로 변경되었음을 확인할 수 있습니다.main.swift 파일의 UIApplicationMain 호출을 다음으로 업데이트해야 합니다.

UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))

XCode 8 이전의 구문은 다음과 같습니다.

import Foundation
import UIKit

UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))

편집 - 2016년 12월

베타 6 이전의 Xcode 8용 솔루션

import Foundation
import UIKit

UIApplicationMain(
    CommandLine.argc,
    UnsafeMutableRawPointer(CommandLine.unsafeArgv)
        .bindMemory( 
            to: UnsafeMutablePointer<Int8>.self, 
            capacity: Int(CommandLine.argc)),
    NSStringFromClass(FLApplication.self),
    NSStringFromClass(AppDelegate.self)
)

가지 은 한가지대확것다입니는장하은안다것니입▁one▁to▁extend▁isative한는을 확장하는 것입니다.UIApplication하위 분류 대신에.애플이 공개한 아이북에 따르면 스위프트의 확장 기능은 다음과 같습니다.

계산된 속성 및 계산된 정적 속성 추가 인스턴스 메서드 및 유형 방법 정의 새 이니셜라이저 제공 첨자 정의 새 중첩된 유형 정의 및 사용 기존 유형이 프로토콜을 준수하도록 합니다.

발췌: Apple Inc."빠른 프로그래밍 언어.

이 하위 분류에 하다면.UIApplication이러한 기능에 만족할 경우 확장이 최선의 방법일 수 있습니다.

Swift 하위 클래스 UIA 응용 프로그램

  1. 만스들의 하위 .UIApplication그리고 당신의 논리를 덧붙입니다.

    import UIKit
    
    class CustomUIApplication: UIApplication {
        override func sendEvent(_ event: UIEvent) {
            super.sendEvent(event)
        }
    }
    
  2. 성을 합니다.main.swiftUIApplicationMain()OS에서 호출하는 응용프로그램의 새로운 진입점인 글로벌[About] 기능입니다.이 함수는 호출된 함수로부터 인수를 수신합니다.UIApplication 이름, 클스이름래,,UIApplicationDelegate클래스[About] 이름을 입력하고 주 RunLoop을 시작합니다.

    import UIKit
    
    UIApplicationMain(
        CommandLine.argc,
        CommandLine.unsafeArgv,
    
        NSStringFromClass(CustomUIApplication.self), //was created at step 1
        NSStringFromClass(AppDelegate.self)
    )
    
  3. /주를 제거/주석으로 합니다.@UIApplicationMain 기주석에 AppDelegate.

@UIApplicationMain를 생성합니다.main.swift.

그렇지 않으면 컴파일 오류가 발생합니다.

UIApplicationMain에서는 속성을 할 수 .

``` Swift
//@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    //...
}
```

언급URL : https://stackoverflow.com/questions/24020000/subclass-uiapplication-with-swift

반응형