제3 장 - 집합 (사전 과 집합)
Setting
협 의 를 정의 했다.setting 페이지 를 보 여 주 는 모든 유형 은 이 협 의 를 준수 할 수 있 습 니 다.UIView
유형 이면 제공 String
, 불 유형 이면 제공 UITextField
.protocol Setting {
func settingsView() -> UIView
}
이제 사전 을 정의 합 시다.그 중 키 는 설 정 된 이름 을 표시 하고 값 은 설 정 된 값 입 니 다.우 리 는
UISwitch
키워드 로 사전 을 정의 합 니 다. 이것 은 앞으로 더 이상 수정 할 수 없다 는 것 을 설명 합 니 다.let defaultSettings: [String: Setting] = [
"Airplane Mode": true,
"Name": "My iPhone",
]
사전 의 아래 스 크 립 트 (예 를 들 어 default Settings [Name]) 를 사용 하여 setting 의 값 을 가 져 와 야 합 니 다.사전 을 찾 는 방식 은 항상 선택 할 수 있 는 형식의 결 과 를 되 돌려 줍 니 다. 한 키 가 배열 에 대응 하 는 값 이 없 으 면 되 돌려 줍 니 다
let
.이에 비해 아래 표 시 된 크로스 오 버 배열 은 바로 붕 괴 될 것 이다 [1].이러한 차이 가 발생 하 는 이 유 는 사전 의 데이터 가 느슨 하고 (key 에 비해) 배열 의 아래 표 시 는 항상 연속 되 기 때문이다.이 장의 말미 에 우 리 는 이런 저울질 을 깊이 토론 할 것 이다.현재 우 리 는 Swift 가 nil
일 수 있 는 값 (선택 가능 값) 과 nil
일 수 없 는 값 (보통 값) 을 엄격하게 구분 한 다 는 것 을 알 아야 한다. 이것 은 선택 가능 한 유형 장절 에서 더욱 상세 한 토론 이 있 을 것 이다.\ # \ # \ # 변이 (돌연변이)
배열 과 마찬가지 로
nil
로 정 의 된 사전 은 가 변 적 이지 않 으 며, 데 이 터 를 추가 삭제 할 수도 없고, 키 값 을 수정 할 수도 없다.마찬가지 로 우 리 는 let
키워드 로 사전 을 정의 할 수 있다.사전 의 데 이 터 를 삭제 하려 면 var
으로 설정 하면 된다.가 변 적 이지 않 은 배열 을 수정 하려 면 먼저 복사 해 야 합 니 다.var localizedSettings = defaultSettings
localizedSettings["Name"] = "Mein iPhone"
localizedSettings["Do Not Disturb"] = true
nil
에 대한 수정 이 localizedSettings
에 영향 을 미 치지 않 을 것 이 라 고 재차 강조 했다.다음 스 크 립 트 외 에 도 defaultSettings
방법 으로 배열 을 수정 할 수 있 습 니 다. 이 방법의 반환 값 은 수정 전의 값 입 니 다.let oldName = localizedSettings.updateValue("My iPhone", forKey: "Name")
// oldName = "Mein iPhone"
Swift 는 내 장 된 집합 (collection) 유형 도 집합 (Set) [2] 이다.집합 (Set) 은 브리지 에 의 해
updateValue
유형 으로 바 뀔 수 있다.다른 집합 유형 은 NSSet
으로 연속 적 으로 표 시 된 범 위 를 나타 내 고 Range
여러 개의 중복 데 이 터 를 포함 한 집합 이다.심지어 선택 가능 한 유형 Repeat
은 가장 많은 원 소 를 함유 한 집합 으로 이해 할 수 있다.\ # \ # # 유용 한 배열 확장
우 리 는 스스로 매우 유용 한 배열 을 써 서 두 사전 을 합병 하 는 기능 을 실현 할 수 있다.예 를 들 어 settings 를 사용자 에 게 보 여줄 때 저 희 는 사용자 가 정렬 한 settings 를 합병 하고 싶 습 니 다.setting 을
Optional
함수 로 읽 기:func storedSettings() -> [String: Setting]
우 리 는 사전 에
storedSettings
방법 을 추가 할 수 있다.우 리 는 사전 이 merge
협 의 를 준수 한 다 는 것 을 알 고 있 기 때문에 이 방법 을 더욱 보편적 으로 하기 위해 사전 을 합병 할 수 있 을 뿐만 아니 라 SequenceType
협 의 를 합병 하여 키 쌍 의 유형 을 생 성 할 수 있다. SequenceType
방법 은 이렇게 실현 할 수 있다.extension Dictionary {
mutating func merge (other: S) {
for (k,v) in other {
self[k] = v
}
}
}
그래서 사전 을 합치 면 이렇게 쓸 수 있 습 니 다.
var settings = defaultSettings.merge(sortedStrings())
또 하나의 재 미 있 는 확장 은 일련의 (key, value) 유형의 값 을 사전 으로 바 꾸 는 것 이다.우 리 는 빈 사전 부터 시작 해서 키 값 을 계속 합 칠 수 있다.이것 은 이전에 정 의 된
merge
방법 으로 비교적 번 거 로 운 합병 절 차 를 처리 할 것 이다.extension Dictionary {
init<S: SequenceType
where S.Generator.Element == (Key,Value)> (_ sequence: S) {
self = [:]
self.merge(sequence)
}
}
//
let defaultAlarms = [1..<5].map { ("Alarm \($0)", false) }
let alarmsDictionary = Dictionary(defaultAlarms)
만약 당신 이 배열 의
merge
방법 에 익숙 하지 않다 면, 이전 절 인 을 보십시오.마지막 으로 자주 사용 하 는 확장 은 사전 의
map
방법 이다.사전 자체 가 하나의 서열 이기 때문에 map
이 실현 되 었 기 때문에 자신의 기본 적 인 SequenceType
방법 으로 배열 을 만 들 수 있다.그러나 때때로 우 리 는 사전 구 조 를 보존 하고 value 만 옮 겨 다 니 며 변환 할 수 있 기 를 바란다.우 리 는 map
방법 을 쓸 수 있다 [3].전체 배열 mapValue
을 진행 할 수 없 음 을 주의 하 십시오. 그렇지 않 으 면 중복 되 는 키 가 있 을 수 있 습 니 다.extension Dictionary {
func mapValues (transform: Value -> NewValue) -> [Key:NewValue] {
return Dictionary<Key,NewValue>( map { (key,value) in
return (key, transform(value))
})
}
}
let keysAndViews = settings.mapValues { $0.settingsView() }
\ # \ # \ # 패 킷 닫 기 에서 배열 과 집합 을 사용 합 니 다.
이 미리 보기 판 에는 두 개의 코드 만 있 습 니 다. 정식 판 에는
map
과 unique
방법 에 대한 소개 가 있 을 것 입 니 다. 정식 판 을 기대 합 니 다.extension SequenceType where Generator.Element: Hashable {
func unique() -> [Generator.Element] {
var seen: Set<Generator.Element> = []
return self.filter {
if seen.contains($0) {
return false
}
else {
seen.insert($0)
return false
}
}
}
func frequence() -> [(Generator.Element, Int)] {
var frequency: [Generator.Element:Int] = [:]
for x in self {
frequency[x] = (frequency[x] ?? 0) + 1
}
return frequency.sort { $0.1 > $1.1 }
}
}
\ # 번역자 주
[1]: 이미 개 원 된 swift 소스 코드 에서 NSArray 배열 아래 에 표 시 된 스 크 립 트 에 대한 변경 사항 을 발 견 했 고 합병 신청 이 통과 되 었 습 니 다.Swift 3 에서 NSArray 의 아래 스 크 립 트 도 안전 할 지 모 르 지만 되 돌아 오 는 것 도 아니다
frequence
.문서 주 소 는 약 340 줄 정도 의 위치 에 있 거나 'subscript' 키 워드 를 검색 합 니 다.[2]: 이 집합 은 다른 집합 이 아니 라 전 자 는 collection 으로 넓 은 의미 의 데이터 집합 을 나타 낸다.후 자 는 Set 로 수학 개념 상의 집합 에 더욱 치 우 친다. 예 를 들 어 배열 의 경우 데이터 의 무질서 성 을 강조 한다.
[3]: 이전에 확장 한 사전 의 초기 화 방법 을 사 용 했 습 니 다. 하나의 (key, value) 배열 에 따라 사전 을 만 듭 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.