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
가치들의,values
method는 보다 추상적인 컬렉션 유형을 반환합니다.당신이 할 수 있는 방법이 있습니까?Array
사전의 값을 추출하지 않고 포함하기for-in
루프?
Swift 2.0 기준으로Dictionary
의values
속성은 이제 a를 반환합니다.LazyMapCollection
대신에LazyBidirectionalCollection
.그Array
type은 다음 추상 컬렉션 유형을 사용하여 자체를 초기화하는 방법을 알고 있습니다.
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
'programing' 카테고리의 다른 글
UITableViewController 외부의 정적 테이블 보기 (0) | 2023.05.12 |
---|---|
EP Plus - Excel 표 읽기 (0) | 2023.05.07 |
Bash에서 지정된 시간 초과 후 하위 프로세스를 종료하는 방법은 무엇입니까? (0) | 2023.05.07 |
탐색 모음에서 뒤로 단추 색 변경 (0) | 2023.05.07 |
정수로 캐스트 문자열 입력 (0) | 2023.05.07 |