2014-09-28 4 views
1

Swift에서 과 NSFontBoldTrait을 비트 단위로 비교하려고합니다.. 오브젝티브 C에서Swift에서 NSFontSymbolicTraits와 NSFontBoldTrait를 어떻게 비교합니까?

이 같이 할 것 :

그래서 나는 그것이 스위프트이이어야한다 생각하고
BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold); 

: ...

let isBold:Bool = font.fontDescriptor.symbolicTraits & NSFontBoldTrait 

그러나 그 결과 다음과 같은 오류 :

Cannot invoke '&' with an argument list of type '(NSFontSymbolicTraits, Int)'

누구나 내가 아는 것은 무엇입니까? 어떤 도움이라도 대단히 감사하겠습니다. 참고

: 나는 미친 사람처럼 구글에서하고 해결책을 찾아 NSFontDescriptor에 대한 설명서 및 다른 NSFont - 관련 클래스를 통해 읽으려고 시간을 보낼 것

답변

4

스위프트에서 의 유형 별칭은 NSFontSymbolicTraits입니다. 그래서 특정 형질의 존재를 확인하기 위해 비트의 결과 인 &을 0과 비교해야합니다. 불행하게도, 개별 제약 유형 Int으로 가져온, 그래서 당신은 또한 적당한 유형으로 변환해야합니다 당신은 아이폰 OS (대신 OS X)에서이 작업을 수행하고자한다면

let isBold = 0 != (font.fontDescriptor.symbolicTraits & NSFontSymbolicTraits(NSFontBoldTrait)) 

, UIFont 다른있다 이행. UIFontDescriptorSymbolicTraitsRawOptionSetType이다, 그래서 당신은 nil&의 결과 비교 : 응 @ 매트

let isBold = nil != (font.fontDescriptor().symbolicTraits & UIFontDescriptorSymbolicTraits.TraitBold) 
+0

를? 'var fontDescriptor : NSFontDescriptor! {get}' –

+0

'let font = NSFont (이름 : "Helvetica", 크기 : 12); println (font.fontDescriptor.symbolicTraits & NSFontSymbolicTraits (NSFontBoldTrait))'0 '을 출력합니다. –

+0

글쎄, 알았어.하지만 iOS에서는 다른 점이 분명하다. 당신은 그들이 이런 종류의 차이를 철저히 줄 것이라고 생각할 것입니다. – matt