2017-01-02 2 views
2

현재 현재 프로젝트를 Swift3 (2.3 이상)로 마이그레이션 중이며 시퀀스 형식에 대한 확장명에 문제가 있습니다. 확장은 소스 배열에서 고유 한 값의 사전을 반환하도록 설계되었습니다. 즉 var myArray = ["Apple","Apple","Orange","Banana","Banana"]Swift 3 - 고유 한 요소 개수로 사전 배열을 줄입니다.

".freq"확장자는 다음 형식의 사전을 반환합니다.

:

extension Sequence where Self.Iterator.Element: Hashable { 

    func freq() -> [Self.Iterator.Element: Int] { 
     return reduce([:]) { (accu: [Self.Iterator.Element: Int], element) in 
      accu[element] = (accu[element]? + 1) ?? 1 
      return accu 
     } 
    } 
} 

문제가 accu[element] = (accu[element]? + 1) ?? 1 인해 구문 변화, 스위프트 3에서 작동하지 않습니다 라인은 다음과 같습니다

["Apple":2,"Orange":1,"Banana":2] 

작동 현재 스위프트 2.3 구문이다 아래 첨자를 통해 할당 할 수 없습니다. accu는 let 상수입니다.

아마도 이것이 쉬운 문제는 아니지만 swift3에서이를 수행하는 방법에 대한 적절한 예를 찾을 수없는 것 같습니다.

답변

3

이 시도 :

extension Sequence where Self.Iterator.Element: Hashable { 

func freq() -> [Self.Iterator.Element: Int] { 
    return reduce([:]) { 
      (accu: [Self.Iterator.Element: Int], element) in 
      var accu2 = accu 
      accu2[element] = (accu2[element] ?? 0) + 1 
      return accu2 
     } 
    } 
} 
+0

큰 작동합니다. 감사. – Villainsoft

+0

안녕하세요. @Villainsoft – wajeeh

관련 문제