신속한 사전 : 값을 배열로 가져옵니다
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부터 Dictionary
의 values
속성은 이제 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
'Programing' 카테고리의 다른 글
그룹당 여러 변수 집계 / 요약 (예 : 합계, 평균) (0) | 2020.06.21 |
---|---|
symfony2의 컨트롤러에서 parameters.yml을 어떻게 읽습니까? (0) | 2020.06.21 |
Mockito.any ()는 제네릭과 인터페이스를 전달합니다. (0) | 2020.06.21 |
bash에서 (공백이 아닌) 코드 줄 수 (0) | 2020.06.21 |
IIS에서 요청 시간 초과를 늘리는 방법은 무엇입니까? (0) | 2020.06.21 |