Swift의 Xcode 6 -β5에서 발생한 오류 해결 방안에 대한 의문점

8370 단어 Xcode6SwiftiOS8
아직도 이해 못 할 일이 많기 때문에 (=나 혼자 이해 부족) 공부하면서 필기도 해야 한다.
참고로 글은 2014년 8월 12일 현재의 검증 결과로 앞으로의 업무 보증은 전혀 무책임하다.
풀리지 않는 의문 중 하나로 Xcode6-β5 이후 발생하기 시작한 오류.

문제 오류


문제 오류 중 하나

Overiding declaration requires an 'override' keyword하층 방법init(frame:CGRect)override 수식자의 오류를 더해 주십시오
단순히 Xcode6-β5 이후override부터 수식자가 필요할 뿐이다.
이것도 특별히 어려운 것은 아니니 이해할 수 있다.
スクリーンショット 2014-08-13 12.47.27.png

문제 2

Class 'X' does not implement its superclass's required members문제는 required 하는 방법이나 부족한 잘못이다.
자류UIView에서 실시해야 할 방법이 있는 것 같다.

이에 따라 대책으로 다음과 같은 다른 사이트에서 실시required init(coder aDecoder: NSCoder!)된 이니셜의 대응 방법이 발견됐다.곤란할 때 Stack Over Flow씨.
required init(coder aDecoder: NSCoder!) {
  super.init(coder: aDecoder)
}

실수가 사라지다.
MyUIView.swift
import UIKit

class MyUIView:UIView
{
    required init(coder aDecoder: NSCoder!) {
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect)
    {
        super.init(frame: frame)
    }
}

메시지


그리고 마침내, 여기서부터 주제입니다.

잘못된 문제에 대한 의문


여기까지만 해도 잘못된 처리 방법에 대해'경사스럽다'고 답했지만, 자신의 이해가 부족해 왜 실수가 일어나지 않는지 이해할 수 없었다.
그래서 나는 이 문제에 대해 진일보한 의문과 흥미를 가지게 되어 두뇌를 검증하고 정리하기 시작했다.

Swift Protocol에 대한 간단한 정리


스위프트 계승에 대한 간단한 정리.


수식자 Required 및 override


프로토콜의 구조와 계승 메커니즘을 이해함으로써 계승 주제UIView에서 오류와 오류를 피하는 메커니즘을 깨달았다.
MyUIView.swift
import UIKit

class MyUIView:UIView
{
    //protocol NSCodingのイニシャライザ
    required init(coder aDecoder: NSCoder!) {
        super.init(coder: aDecoder)
    }

    //class UIViewのイニシャライザ
    override init(frame: CGRect)
    {
        super.init(frame: frame)
    }
}
원래 자신이 설치한 init(frame: CGRect) 이니셜은 UIViewinit(frame: CGRect)를 다시 쓴 것이다.

오류MyUIView를 피하기 위해 클래스에 추가required init(coder aDecoder: NSCoder!)NSCoding 프로토콜에서 선언한 초기화기입니다.

한 마디로 하면 자신이 이해한 내용을 정리하면 알파벳의 스타일을 완전히 이해할 수는 없지만 다음과 같은 내용을 설명할 수 있다.
  • 프로토콜에 발표된 초기화기init는 설치 클래스에 required 수식자
  • 를 추가해야 한다.
  • 부류에 성명된 자모init는 설치(자)류에 override 수식자
  • 를 추가해야 한다.

    더욱 진일보한 의문을 향해


    하지만 여기서는 문외한 같은 새로운 의문이 나온다.
    확실히 UIViewControllerNSCoding 협의를 계승했죠?

    바로 그렇게 물려받고 있다.
    그렇다면 왜 MyUIViewControllerMyUIViewNSCoding 협의를 계승했는데도 같은 오류가 발생하지 않았을까?예전에는 부모님이 거의 다르셨죠?이렇게 끝났습니다.
    같은 협의NSCoding가 이루어졌지만 View 클래스에서 오류가 발생했고 ViewController 클래스에서 오류가 발생하지 않았다는 것은 설명할 수 없다.
    뭐, 문법과 언어 규범을 이해하는 사람은 논리적으로 설명할 수 있지만 자신은 항상 고집을 부리며 신경을 쓴다.w

    그래서 일부러 ViewController반의 알파벳을 시험해 봤어요.

    오류가 발생했습니다.override이에 따라 Class 'X' does not implement its superclass's required members에도 필살UIViewController의 이니셜이 추가됐다.
    required init(coder aDecoder: NSCoder!) {
      super.init(coder: aDecoder)
    }
    

    실수가 사라지다.

    주안점


    조사 결과 이번 상황에서 NSCodingUIViewController가 상속받은 수량이 많은 협의 중 UIView협의에만 초서NSCoding가 존재하는 것으로 나타났다.
  • 실장(자)류에서 알파벳init(알파벳 중복 시도 63;)이 경우 프로토콜에 발표된 초기화기override를 실현해야 한다.
  • 이것은 required가 되고 잘못된 표면화될 수 있다.
    앞으로 선언Xcode-β5의 합의를 사용하면 init의 골치 아픈 기술이 될까?
    언어 규범을 더 정확하게 이해할 수 있다면 논리적으로 설명할 수 있을 것 같지만, 우선 머릿속의 정리와 비망록으로 쓰고 또 쓰라고 했습니다.
    그나저나 좀 더 쉽게 설명할 수 있는 사람이 있다면 지적하거나 교수해 주세요.
    Lovely Swift!!!

    좋은 웹페이지 즐겨찾기