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
일반적으로 배열로 원합니다.
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
입니다. 그래서 여기 해결책이 있습니다.
앞에서 언급했듯이 신속하게 형식 유추 속성으로 인해 코드에서 .values
함수 에서 반환 된 형식 이 UIColor 배열을 반환하고 있다고 유추 할 수 있습니다 . 그러나 Swift는 유형 안전을 원하므로 colors
배열에 값을 저장할 때 명시 적으로 정의해야합니다. 신속한 5 이상에서는 이제 다음을 수행 할 수 있습니다.
let colors = [UIColor](colorsForColorSchemes.values)
답변
이것이 스위프트 5에서 가장 유용한 것으로 나타났습니다.
colorsForColorSchemes.allValues
문서 참조-https: //developer.apple.com/documentation/foundation/nsdictionary/1408915-allvalues