Swift를 사용한 하위 클래스 UIApplication
Objective C에서는 간단했습니다. main.m 파일을 업데이트하고 UIApplicationMain () 매개 변수를 변경하는 것으로 충분했습니다.
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
그러나 신속하게 main.m 파일이 없습니다.
"글로벌 스코프에서 작성된 코드는 프로그램의 진입 점으로 사용되므로 주 기능이 필요하지 않습니다."
그렇다면 UIApplication을 신속하게 하위 클래스로 만드는 방법은 무엇입니까 ?? 어떠한 제안?
참고 이전 구문을 찾고 있다면 2019 년 6 월 XCode 10.1 및 Swift 5에 대한 구문이 업데이트되었습니다 ( 여기 에서 matt의 답변 && Tung Fam의 답변에 대한 크레딧 ).
네, 해결책을 찾았습니다
먼저 AppDelegate.swift 파일의 맨 위에 다음 줄이 있습니다.
@UIApplicationMain
이 줄은 범위 밖에 있기 때문에 (파일 수준에 있음) 즉시 실행되며 컴파일러가 표준 주 함수로 변환한다고 가정합니다.
그래서 저는 새로운 Swift-Only 애플리케이션에서 시작하여 이렇게했습니다.
- 주석 처리
@UIApplicationMain
- 다음과 같은 main.swift 파일을 추가했습니다 (FLApplication은 내 하위 클래스입니다).
중요 파일 이름은 main.swift로 지정해야합니다. 다른 파일에서는 최상위 문이 지원되지 않기 때문입니다! 다른 파일 내에 UIApplicationMain () 호출을 추가 할 수 없습니다. 그렇지 않으면 다음 오류가 발생합니다.
최상위 수준에서는 식을 사용할 수 없습니다.
이것은 main.swift 파일입니다.
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
그런 다음 다음 코드를 사용하여 UIApplication 하위 클래스 인 FLApplication.swift에 대한 신속한 파일을 만듭니다.
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
이제 UIApplication이 올바르게 서브 클래 싱되고 로그에 "send event"메시지가 표시됩니다.
OLD EDITS
참고로, 이것은 버전 1에서 버전 3으로 많이 변경 되었으므로 여기에 모든 이전 편집을 남겨 둡니다.
편집-2015 년 3 월
Hu Junfeng이 주석을 달았 듯이, 이제 UIApplicationMain
main.swift 파일 에 대한 설명은 The Swift Language Reference : Link 의 Attributes 섹션에 문서화되어 있습니다.
Thomas Verbeek의 설명대로 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)
)
한 가지 대안은 UIApplication
서브 클래 싱하는 대신 확장 하는 것입니다. Apple에서 출시 한 iBook 에 따르면 Swift의 확장 기능은 다음을 수행 할 수 있습니다.
Add computed properties and computed static properties Define instance methods and type methods Provide new initializers Define subscripts Define and use new nested types Make an existing type conform to a protocol
Excerpt From: Apple Inc. “The Swift Programming Language.
If your needs in subclassing UIApplication
are satisfied by those capabilities, an Extension might be the way to go.
참고URL : https://stackoverflow.com/questions/24020000/subclass-uiapplication-with-swift
'Programing' 카테고리의 다른 글
힙 크기보다 훨씬 많은 메모리를 사용하는 Java (또는 올바른 Docker 메모리 제한 크기) (0) | 2020.09.12 |
---|---|
Angular“10 $ digest () 반복에 도달했습니다”오류 문제를 해결하는 방법 (0) | 2020.09.12 |
JavaScript로 GetElementById 대신 getElementByClass를 사용하는 방법은 무엇입니까? (0) | 2020.09.12 |
Graph API를 사용하는 Facebook 'Friends.getAppUsers' (0) | 2020.09.12 |
State, ST, IORef 및 MVar의 차이점 (0) | 2020.09.12 |