2015-01-09 2 views
0

사전 내에 저장된 튜플의 요소에 액세스하려고합니다.사전에 저장된 튜플에 액세스하기

// declare the dictionary 
var a: [Int: (start: Int, end: Int)]! 
a=[ 
    0: (1, 2), 
    3: (4, 5) 
] 

// printout is "Optional {(1, 2)}" 
var c = a[0] 
println(c) 

// throws an error - "does not have a member" 
c.start 

// printout is also "Optional {(1, 2)}" 
var b = a[0].0 
println(b) 

위의 경우 c는 "시작"에 액세스 할 수 없지만 b는 여전히 튜플입니다.

사전에서 튜플에 액세스하려고하면 오류가 발생합니까?

+0

'c'는 선택 사항입니다. 'c? .start'를 시도하십시오. – bluedome

+0

귀하의 경우 암시 적으로 '!' 대신 '?' 결과를 비 선택적으로 유지합니다. 해결책은 c! .start입니다. println ("\ (a [0] !. start)"), 결과를 제공합니다. – Suresh

+0

문제는 튜플과 관련이 없습니다. http://stackoverflow.com/questions/25979969/println-dictionary-has-optional을 비교하십시오. –

답변

1
// declare the dictionary 
var a: [Int: (start: Int, end: Int)]! 
a=[ 
    0: (1, 2), 
    3: (4, 5) 
] 

// printout is "Optional {(1, 2)}" 
var c = a[0] 
println(c) 

// just use ! to force unwrap your optional 
c!.start 

// or you can use if let to unwrap it 
if let c = a[0] { 
    println(c) 
    c.start 
} 

var b = a[0].0 
println(b!) 

b는이

if let b = b { 
    println(b) // here b is not optional anymore 
} 
+0

감사합니다! 내가 이해할 수 없거나/물론 나를 던져 버린 이유는 var. b가 .0을 가지고 있더라도 여전히 선택 사항 {{1, 2}} 일 것입니다. –

+0

let은 let을 사용할 때 var가 선택 사항이 아닙니다. –

+0

나는 var b를, 맨 끝의 것을 의미합니다. –

0

처음처럼 전무는 c는 선택 사항입니다

c.start 

때문에, 당신이 좋아하는 랩을 해제 할 필요가 말할 수없는 경우 당신이 확인할 수 있습니다

c!.start 

같은 것이 b를 들어, b.0 할 수 없습니다,하지만 당신은 나 같은 BTY이 b!.0을 필요!

그럼에도 불구하고 .start, 당신은 같은 방법으로 cb에 액세스 할 수 있어야합니다.

관련 문제