【Swift】warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.

4727 단어 오류iOSSwift애플
Swift에서 제목과 같은 런타임 오류가 발생했기 때문에 메모.

문제 실행 코드



UILabel을 확장하여 Interface Builder에서 텍스트 밑줄의 유무를 설정할 수 있도록하려고했습니다.

extension UILabel {

    @IBInspectable
    var underline: Bool {
        get {
            return self.underline
        }
        set {
            guard let text: String = self.text else {
                return
            }
            let textAttributes =  NSMutableAttributedString(string: text)
            if newValue {
                textAttributes.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleSingle.rawValue, range: NSMakeRange(0, text.characters.count))
            } else {
                textAttributes.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleNone.rawValue, range: NSMakeRange(0, text.characters.count))
            }
            self.attributedText = textAttributes
            self.underline = newValue
        }
    }
}

오류 전문


warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.

오류 내용



구그라고 보았더니, 이하와 같은 사례가 발견되어 재귀적인 호출로 무한 루프에 빠져 있는 모양.

참고



그 외의 정보는 영어 정보가 대부분으로 잘 모르고,

결론


var underlinesetter 속에서 newValue 를 자신에게 대입한다고 하는 성대한 착각 처리를 해 버렸던 것이 문제였습니다.
이 때문에, setter 안에서 다시 setter 가 불려, 또 setter 가 불려, 라고 하는 무한 루프가 되어 있었던 것 같습니다.

그래서 19 번째 줄self.underline = newValue삭제로 수정할 수있었습니다.

기본적인 부분이 빠져 있네, 부끄러운

그건 그렇고



위의 Extension 코드는 Github에 있습니다.
htps : // 기주 b. 코 m / 타지 타지 / T X x Tenshion / T Ree / Ma S r / T Ji x x Tenshion / T Ji x x Tenshion

좋은 웹페이지 즐겨찾기