2017-10-17 4 views
4

을 나는 지능 (또는 INT16 또는 UINT8) 엑스 코드 (8) 즉- 새로운 스위프트 컴파일러

값을 주어졌다 AnyObject의 종류를 확인해야 - 전환 객체를 사용하여 케이스를 사용합니다. is Uint8, is Int16, is Int 작동합니다.
Xcode 9에서는 항상 true 인 첫 번째 사례를 입력합니다.

var t1: AnyObject? 
var t2: AnyObject? 

t1 = 30 as AnyObject 
t2 = Int16(30) as AnyObject 

if let obj1 = t1 { 
    switch obj1 { 
    case is UInt8: 
     print("UInt8") 
    case is Int16: 
     print("Int16") 
    case is Int: 
     print("Int") 
    default: 
     break 
    } 
} 

if let obj2 = t2 { 
    switch obj2 { 
    case is UInt8: 
     print("UInt8") 
    case is Int16: 
     print("Int16") 
    case is Int: 
     print("Int") 
    default: 
     break 
    } 
} 

엑스 코드 (8) 놀이터 콘솔 인쇄 :
지능
INT16

엑스 코드 9 놀이터 콘솔 인쇄 : 여기

운동장에 대한 코드 샘플입니다
UINT8
UINT8

A. 누군가 설명 할 수 있고/또는 첨부 할 수 있습니까? 이에 관한 문서화 된 참고서는 무엇입니까?
B. 나는 누군가 XCode 9에서 똑같은 기능을 수행하도록 도울 수있어서 행복 할까.

고마워. 모든 숫자 유형 Any 있습니다 스위프트 3 이후

답변

2

하지 AnyObject

var t1: Any? 
var t2: Any? 

t1 = 30 as Any 
t2 = Int16(30) as Any 
... 

이 문제를 해결합니다.

어떤 유형과도 일치하는 브릿지 유형을 NSNumber으로 캐스팅한다고 가정합니다.

+0

NSCFNumber에 브리징하는 것이 정확히 일어납니다. 'print of this type 'of of obj – MatanGold

+0

이렇게 생각합니다. 'AnyObject'는 클래스 타입이고'Intxx'는 클래스가 아닙니다. 따라서 AnyObject로 캐스팅하면 NSNumber로 변환해야합니다. – JeremyP

관련 문제