Programing

신속한 사전 : 값을 배열로 가져옵니다

lottogame 2020. 6. 21. 19:39
반응형

신속한 사전 : 값을 배열로 가져옵니다


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의 값을 반환하는 대신 values메서드가 더 추상적 인 컬렉션 유형을 반환하는 것 같습니다 . 루프 Array에서 사전을 추출하지 않고 사전의 값을 포함 하는 방법이 for-in있습니까?


Swift 2.0부터 Dictionaryvalues속성은 이제 LazyMapCollection대신을 반환 합니다 LazyBidirectionalCollection. Array유형이 추상 수집 유형을 사용하여 자체를 초기화하는 방법을 알고있다 :

let colors = Array(colorsForColorSchemes.values)

Swift의 타입 추론은 이미 이러한 값이 UIColor객체 라는 것을 알고 있으므로 타입 캐스팅이 필요하지 않습니다.


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

let colors = colorsForColorScheme.map { $0.1 }

클로저는 사전에서 키-값 튜플을 가져 와서 값만 반환합니다. 따라서 map 함수는 값의 배열을 생성합니다.

같은 코드의 더 읽기 쉬운 버전 :

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

최신 정보

Xcode 9.0부터는 프로토콜 values을 따르는 속성을 사용하여 사전 값에 액세스 할 수 있습니다 Collection.

let colors = colorsForColorScheme.values

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


당신은 확장을 만들 수 있습니다 LazyMapCollection

public extension LazyMapCollection  {

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

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

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

반응형