2017-12-29 82 views
-1

나는 폐쇄 연구 중에 질문이 있습니다.데이터 형식 메서드를 신속하게 만들 수 있습니까?

내가 배열 유형에 같은 데이터 유형 폐쇄 방법을 원하는 .sort(), .filter(), .reduce(), .MAP()

그러나 어떻게이 일을 할 수 있습니다. 해당 데이터 유형이 클래스가 아닙니다. 내가

array.somemethod ({폐쇄}),

하지 않는 Somefunc하게 원하는


(입력 : 배열을 폐쇄 : {....})

-

신속하게 데이터 유형 메서드를 만들 수 있습니까?

그렇지 않으면 func 만 사용할 수 있습니까?

+0

스위프트의 대부분의 데이터 유형은 구조입니다. 배열, 문자열, 복식, 입, 날짜. 너 정확히 뭘 하려구? –

+0

@Leo Dabus 흠 ... Arrayfomemodod ({closure})가 아닌 Somefunc (입력 : 배열, 클로저 : {....})와 같이 만들고 싶습니다. – kimjinyam

+0

배열을 확장하고 클로저를 다음과 같이 전달해야합니다. 메소드 인수. –

답변

1

배열을 확장하고 메소드 인수로 클로저를 전달하면됩니다.

extension Array { 
    mutating func removeAll(where isExcluded: (Element) -> Bool) { 
     for (index, element) in enumerated().reversed() { 
      if isExcluded(element) { 
       remove(at: index) 
      } 
     } 
    } 
} 

또 다른 옵션 확장 RangeReplaceableCollection :

extension RangeReplaceableCollection { 
    mutating func removeAll(where isExcluded: (Element) -> Bool) { 
     for index in indices.reversed() where isExcluded(self[index]) { 
      remove(at: index) 
     } 
    } 
} 

당신이 (조건에 따라 배열의 요소를 제거) 필터의 반대로 작동하는 돌연변이 방법을 만들려는 말을하자

용도 :

var array = [1, 2, 3, 4, 5, 10, 20, 30] 
array.removeAll(where: {$0 > 5}) 
print(array) // [1, 2, 3, 4, 5]