Swift 진급―map 와 flatMap 의 사용

2996 단어 SwiftmapflatMap
map 와 flatMap 은 주로 집합 에서 의 사용 과 선택 가능 한 유형 에서 의 사용 으로 나 뉘 는데 아래 를 살 펴 보 자.
집합 에 맵 과 flatMap 을 사용 합 니 다.
먼저 다음 코드 를 보십시오.

func getInfos(by name: String) -> [String] {
 if name == "Jack" {
 return ["Male", "25", "New York"]
 } else if name == "Lucy" {
 return ["Female", "18", "London"]
 } else {
 return ["Unkown", "Unkown", "Unkown"]
 }
}

let names = ["Jack", "Lucy", "Nobody"]

let infos1 = names.map { getInfos(by: $0) }
print(infos1)

let infos2 = names.flatMap { getInfos(by: $0) }
print(infos2)
입력 은 1 차원 배열 이 고 변환 후 infos 1 의 결 과 는 다음 과 같은 2 차원 배열 이기 때문에 map 후 2 층 구조 가 있 습 니 다.

[["Male", "25", "New York"], ["Female", "18", "London"], ["Unkown", "Unkown", "Unkown"]]
입력 은 1 차원 배열 입 니 다.변환 후 infos 2 의 결 과 는 다음 과 같은 1 차원 배열 이기 때문에 flatMap 후 에는 1 층 구조 만 있 습 니 다.

["Male", "25", "New York", "Female", "18", "London", "Unkown", "Unkown", "Unkown"]
map 가 Array 에서 의 실현 은 대체적으로 다음 과 같다.

extension Array {
 func map<T>(_ transform: (Element) -> T) -> [T] {
 var result: [T] = []
 for x in self {
  result.append(transform(x))
 }
 return result
 }
}
flatMap 의 Array 에서 의 실현 은 대체적으로 다음 과 같다.

extension Array {
 func flatMap<T>(_ transform: (Element) -> [T]) -> [T] {
 var result: [T] = []
 for x in self {
  result.append(contentsOf: transform(x))
 }
 return result
 }
}
선택 가능 한 유형 에 맵 과 flatMap 을 사용 합 니 다.
다음 코드 에서 입력 은 string Numbers.first 입 니 다.그 유형 은 String 입 니까?
4.567917.전환 후 x 의 유형 은 Int??,그래서 맵 뒤에 2 층 Optional 이 있어 요
  • 전환 후 Y 의 유형 은 Int?,그래서 flatMap 후 에는 1 층 Optional 만 있 습 니 다
  • 
    let stringNumbers = ["1", "2", "3", "foo"]
    let x = stringNumbers.first.map { Int($0) } // Optional(Optional(1))
    let y = stringNumbers.first.flatMap { Int($0) } // Optional(1)
    map 가 optional 에서 의 실현 은 대체적으로 다음 과 같다.
    
    extension Optional {
     func map<U>(transform: (Wrapped) -> U) -> U? {
     if let value = self {
      return transform(value)
     }
     return nil
     }
    }
    flatMap 의 optional 에서 의 실현 은 대체적으로 다음 과 같다.
    
    extension Optional {
     func flatMap<U>(transform: (Wrapped) -> U?) -> U? {
     if let value = self, let transformed = transform(value) {
      return transformed
     }
     return nil
     }
    }
    이상 은 Swift 진급 입 니 다.-map 와 flatMap 의 상세 한 내용 을 자세히 설명 하고 Swift map 와 flatMap 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기