programing

Swift Dictionary: 배열로 값 가져오기

starjava 2023. 5. 7. 10:46
반응형

Swift Dictionary: 배열로 값 가져오기

나는 다음을 포함하는 사전을 가지고 있습니다.UIColor개체가 열거형 값으로 해시되었습니다.ColorScheme:

var colorsForColorScheme: [ColorScheme : UIColor] = ...

이 사전에 포함된 모든 색상(값)의 배열을 추출할 수 있으면 좋겠습니다.저는 제가 그것을 사용할 수 있다고 생각했습니다.values사전 값을 반복할 때 사용되는 속성(for value in dictionary.values {...}), 그러나 다음 오류가 반환됩니다.

let colors: [UIColor] = colorsForColorSchemes.values
                        ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
'LazyBidrectionalCollection<MapCollectionView<Dictionary<ColorScheme, UIColor>, UIColor>>' is not convertible to 'UIColor'

돌려주는 것보다 더 나은 것 같아요.Array가치들의,valuesmethod는 보다 추상적인 컬렉션 유형을 반환합니다.당신이 할 수 있는 방법이 있습니까?Array사전의 값을 추출하지 않고 포함하기for-in루프?

Swift 2.0 기준으로Dictionaryvalues속성은 이제 a를 반환합니다.LazyMapCollection대신에LazyBidirectionalCollection.그Arraytype은 다음 추상 컬렉션 유형을 사용하여 자체를 초기화하는 방법을 알고 있습니다.

let colors = Array(colorsForColorSchemes.values)

스위프트의 유형 추론은 이미 이러한 값이UIColor물체를 사용하기 때문에 유형 주조가 필요하지 않습니다. 좋습니다!

사전을 값 배열에 매핑할 수 있습니다.

let colors = colorsForColorScheme.map { $0.1 }

닫기는 사전에서 키 값 튜플을 가져와 값만 반환합니다.따라서 지도 함수는 값의 배열을 생성합니다.

동일한 코드의 더 읽기 쉬운 버전:

let colors = colorsForColorScheme.map { (scheme, color) in
    return color
}

갱신하다

Xcode 9.0부터는 사전 값에 액세스할 수 있습니다.values에 부합하는 재산Collection프로토콜:

let colors = colorsForColorScheme.values

일반적으로 어레이로만 사용할 수 있습니다.

let colors = Array(dict.values)

그리고 이것이 마지막입니다.

사용하다colorsForColorScheme.map({$0.value})

다음에 확장을 생성할 수 있습니다.LazyMapCollection

public extension LazyMapCollection  {

    func toArray() -> [Element]{
        return Array(self)
    }
}

colorsForColorSchemes.values.toArray()또는colorsForColorSchemes.keys.toArray()

먼저, 다음 문장에서 당신의 변수(사전) 이름은colorsForColorScheme

var colorsForColorScheme: [ColorScheme : UIColor] = ... 

당신이 가치를 얻으려고 노력하는 동안.colorsForColorSchemes사전을 만들었을 때...

let colors: [UIColor] = colorsForColorSchemes.values

컴파일 시간 오류가 발생할 수 있습니다.어쨌든 나는 네가 오타가 있었다고 생각하고, 너의 사전 이름은.colorsForColorSchemes그래서, 여기 해결책이 있습니다.

앞서 언급했듯이, 당신의 코드는 swift의 유형 추론 속성 때문에, 당신의 코드는 다음으로부터 반환된 유형을 추론할 수 있습니다..values함수가 UIColor 배열을 반환하고 있습니다.그러나 Swift는 유형 안전을 원하므로 값을 저장할 때colors배열, 당신은 그것을 명시적으로 정의해야 합니다.스위프트 5 이상이면 다음과 같이 할 수 있습니다.

let colors = [UIColor](colorsForColorSchemes.values)

사용할 수도 있습니다.flatMap:

let colors = colorsForColorScheme.values.flatMap { $0 }

Swift 5에서 가장 유용한 기능은 다음과 같습니다.

colorsForColorSchemes.allValues

문서 참조 - https://developer.apple.com/documentation/foundation/nsdictionary/1408915-allvalues

언급URL : https://stackoverflow.com/questions/26988167/swift-dictionary-get-values-as-array

반응형