2017-01-06 7 views
0

: 나는 someUInt64_Variable를 추가 내가 얻을 때유형의 사전에 UINT64를 추가 할 수 없습니다 : [문자열 : AnyObject를?] 나는이 같은 사전 만들기 위해 노력하고

func someFunc() -> [String : AnyObject?] { 
    var dic = [ 
      "Name": someString_Variable, 
      "Sum": someUInt64_Variable 
     ] 

문제를 오류 :

Cannot convert value of type UInt64 to expected dictionary value type Optional<AnyObject> 

여기에서해야 할 일, 사용해야합니다 UInt64String으로 변환 할 수 없습니다.
어째서이 오류가 발생합니까?

+1

미리 정의 된 키의 유한 집합을 값으로 매핑하는 데 사전을 사용하는 경우 - 데이터를 나타내는 대신 'struct'모델을 만들어야합니다. – Hamish

+1

항상 그렇듯이 사전 정의 값은 무의미합니다. 정의 상 nil 값은 키 누락을 나타 내기 때문입니다. – vadian

+0

죄송합니다. 아직도해야 할 일을 이해하지 못합니다. 형식을 '[String : AnyObject]'로 변경하려고했지만 여전히 작동하지 않습니다. – 1110

답변

1

스위프트 유형이 유형으로 자동 연결될 때 이전 버전의 Swift에서 작동하는 데 사용됩니다.

let dic : [String: AnyObject?] = [ 
    "Name": someString_Variable as AnyObject, 
    "Sum": someUInt64_Variable as AnyObject 
] 

와 스위프트 StringNSNumber에 대한 유형을 재단에 NSString을 변환합니다

당신은 단지 명시 적으로 AnyObject에 전송할 수 있습니다 : 이제 기능이 제거 된 것을, 당신은 명시 적으로 그것을해야 UInt64.

당신은 단지 그 종류의 자신을 캐스팅 경우 명확 수 있습니다 : 그것은 단순히 객체 아니기 때문에 Int64AnyObject 호환되지 않습니다 : 그것은 정말 여기에서 무슨 일이 일어나고 있는지 이해하는 것이 중요

let dic : [String: AnyObject?] = [ 
    "Name": someString_Variable as NSString, 
    "Sum": someUInt64_Variable as NSNumber 
] 
+0

레코드의 경우 이것은 모든 타입 인'Any'와 클래스에서 오는 임의의 객체 인'AnyObject' 사이의 차이가 있기 때문에 발생합니다 - 구조체는'AnyObject'가 아닙니다. 'UInt64'는 구조체이기 때문에 변환을 명시 적으로 만들어야합니다. 자세한 내용은 [여기] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID342)를 참조하십시오. 실제로 OP가 처음부터 'Any'를 사용하는 것이 더 나을 가능성이 있습니다. – BallpointBen

+0

@BallpointBen, 항상 * Any *와 AnyObject의 차이점이 * 있습니다. Swift 팀은'String'과'Int's를 * Foundation * 유형으로 자동 변환했습니다. 이 사전을'NSDictionary'를 사용하는 * Cocoa Touch * 프레임 워크로 보낼 계획이라면'[String : Any]'는 그것을 자르지 않을 것입니다. – vacawama

+0

아, 그걸 몰랐네. 감사. – BallpointBen

0

.

someUInt64_Variable as NSNumber과 같은 Foundation 유형에 연결하면 Int64을 개체로 묶을 수 있습니다. 새 NSNumber 개체가 할당되고 Int64이 저장됩니다.

아마도 당신은 정말 AnyObject이 필요하지만, 일반적으로이 경우 Any을 사용 :이 더 나은 성능 (추가 힙 할당)를 제공

func someFunc() -> [String : Any] { 
    var dic = [ 
      "Name": someString_Variable, 
      "Sum": someUInt64_Variable 
     ] 

하고 재단 브리징에 의존하지 않습니다.