개발+IT

NSAttributedString에 밑줄 속성을 부여할 때 주의할 점

잊지 말자 rawValue

사용자 UI상에서 문자열을 다루다보면 특정 문자에 밑줄 등을 넣어줘야 하는 경우가 생긴다. iOS에서는 이런 식의 속성을 부여할 수 있는 NSAttributedString을 사용할 수 있는데, key value 쌍을 이용해서 어떤 속성을 적용할 지 정할 수 있다. 예를 들면 아래 코드와 같다(어떤 키가 있는지는 NSAttributedString.Key 공식 문서를 체크하자).

여튼 이 Key 중에서 밑줄 관련하여 제공되는 것은 .underlineStyle과 .underlineColor 이 두가지인데, 이름에서 알 수 있듯이 .underlineStyle은 밑줄을 어떻게 보여줄 것인지, .underlineColor는 밑줄의 색상을 어떻게 할 것인지 정할 수 있다(참고로 .underlineColor를 정하지 않으면 .foregroundColor 키에 설정된 값을 따른다).

.underlineStyle에 설정할 수 있는 값은 미리 정해져있는데, 바로 NSUnderlineStyle이다. 어떤 값을 설정할 수 있는지는 공식 문서를 참조하자. 그런데 위의 예시코드에서와 같이 값을 지정할 때 주의할 점이 있는데, 바로 다음과 같은 상황이다.

NSUnderlineStyle.single은 밑줄을 한줄로 그리도록 하는 값인데, 위와 같이 했을 경우에 빌드는 되지만 해당 구절에서 에러가 나며 앱이 뻗게 된다. 오류가 나지 않도록 하려면 다음과 같이 해야 한다.

차이점이 보이는가? 그냥 NSUnderlineStyle.single로 끝내는게 아니라 rawValue를 따로 호출해야 한다. 실제 구현부가 어떻게 되어있는지는 모르겠으나, NSUnderlineStyle이 OptionSet 프로토콜을 따르도록 되어있는 것이 이유가 아닐까 싶다. 오늘도 이걸 생각 못하고 있다가 한참을 삽질했다. 디버거에서 해당 구간에서 오류가 나는 것이라고 알려주질 않더라고...ㅎ. 여튼 까먹지 않기 위해 기록한다.

GAE BAL JA

구구리 님의 창작활동을 응원하고 싶으세요?

hell yeah, world
hell yeah, world
구독자 111
멤버십 가입

0개의 댓글

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.
새로운 알림이 없습니다.