ios - Swift 5.0 컴파일러 프로토콜 상속 문제가 있는 Xcode 10.2




protocols (2)

Swift 5.0 컴파일러에서 https://bugs.swift.org/browse/SR-10257 을 실행 중일 수 있습니다. 적어도 세 개의 파일이있는 경우에 발생합니다.

  1. BasicViewController.swift
  2. SomeOtherFile.swift
  3. ExampleViewController.swift

SomeOtherFile.swiftAnyObject 형식의 값을 호출하면 AnyObject 모듈 모드로 컴파일되고 위의 순서대로 파일이 컴파일러에 전달됩니다 (두 파일의 중간에 SomeOtherFile.swift 가있는 것처럼 보임). 컴파일러가 func tableView(_:, didSelectRowAt:) 의 구현에 대해 @objc -ness를 적절하게 유추 @objc 못하는 것입니다. 이제는 @objc 로 명시 적으로 태그를 추가 @objc 문제를 @objc 수 있습니다.

우리는 현재 Xcode 버전 (10.2)에 큰 문제가 있습니다.

다음 서명이 포함 된 BasicViewController 클래스가 있습니다.

class BasicViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

그런 다음 ExampleViewController: BasicViewController 와 같은 또 다른 클래스가 있습니다 ExampleViewController: BasicViewController 여기에는 몇 가지 추가 로직이 있습니다.

이제 까다로운 부분이 있습니다 ...

우리는 다른 시뮬레이터 및 장치에서 응용 프로그램을 빌드하고 실행하며 모든 것이 제대로 작동합니다. 그런 다음 앱을 보관하고 갑자기 didSelectRow 가 더 이상 실행되지 않습니다. 프로젝트를 깔끔하게 정리하면 다시 아카이브 할 필요없이 문제를 재현 할 수있었습니다.

이것이 일어날 수있는 경우를 생각할 수 없습니다. 그리고 더 나 UITableViewDelegate . 보관 된 앱을 실행할 때만 하위 클래스에서 호출되지 않는 UITableViewDelegate 메서드로 더 비슷한 문제를 발견했기 때문입니다. 앱 보관 및 제출 중 일부 최적화 문제가있을 수 있습니까?

우리가 dataSource 설정하고 테이블을 올바르게 delegate 했는지 확인합니다. 테이블 위에는 제스처 인식기가 없습니다. 동일한 논리는 앱을 두 번째 / 세 번째로 실행 한 후에 잘 작동하지만 프로젝트를 완전히 완료 한 후에는 처음 실패합니다.

테스트를 수행하고 자식 클래스에서 UITableViewDataSourceUITableViewDelegate 를 설정하면 매번 예상대로 작동합니다. 그것은 프로토콜을 상속 잘 작동하지 않는 것 같습니다. 프로토콜을 부모에 보관하고 자식 클래스에 프로토콜을 추가하면 하위 클래스의 프로토콜이 중복됩니다.

비슷한 경험을 한 사람이 있습니까? 어떤 제안이라도 환영합니다.


나는 같은 문제에 부딪쳤다. 나는 메인 클래스에서 메소드를 직접 추가하여 그것을 수정하고 다른 클래스에서 그것을 오버라이드 했다. 이제 모든 것이 올바르게 호출됩니다.







protocols