Aray와 Dictionary에도 트렌디한 extension이 설치되어 있습니다.
8954 단어 SwiftTargetedExtension
전언
RxSwift, Kingfisher, 그리고 자신의 Danbo 등 총서에서 사용된 .ex
에서 확장extension
의 실시 방법, 방법여기 기사.과 여기 기사.의 상세한 실시 방법을 명확하게 구분하였다.이런 방법 중에는 Array
와Dictionary
등 자신의 하위형 속박이 있는 유형에 직접 적용할 수 없다.그림where Base == Array
을 그리면 컴파일러에게 욕을 먹는다.
계속어제의 투고어떻게든 쓰고 싶다Eltaso[1, 2, 3].eltaso.random
라는 작법은 어제 천신만고 끝에 무사히 성공했고 방법을 공유하면서 보라를 기다리고 있다.
목표
한 마디로 하면 이 글에서 보다 보편적인 문법을 공유하고 싶어서 위의 것과는 조금 다르다[1, 2, 3].ex.random
를 목표로 삼고 싶습니다.
미리 준비하다
대체로여기 기사.에 바탕을 둔 것이기 때문에 그쪽 기사를 보면서 이 글을 읽으면 이해하기 쉬울 것 같다.또한 가능하다면 이 설치 방법을 먼저 기억하는 것이 좋다Array
.
이루어지다
ExampleCompatible.swiftpublic protocol ExampleCompatible {
associatedtype CompatibleType
var ex: CompatibleType { get }
}
public struct Example<Base> {
let base: Base
}
public struct ExampleWithSingleAssociatedType<Base, AssociatedType> {
let base: Base
}
Array.swiftextension Array: ExampleCompatible {
public var ex: ExampleWithSingleAssociatedType<Array<Element>, Element> {
return ExampleWithSingleAssociatedType(base: self)
}
}
extension ExampleWithSingleAssociatedType where Base == Array<AssociatedType> {
public var random: AssociatedType? {
guard !self.base.isEmpty else {
return nil
}
let index = Int(arc4random_uniform(UInt32(self.base.count)))
return self.base[index]
}
}
Playground.swift[1, 2, 3].ex.random // 2
해설
ExampleCompatible.swift
우선 ExampleCompatible
부분에 대해 알고 있는 바와 같이 Example<Base>
외에 ExampleWithSingleAssociatedType<Base, AssociatedType>
라는 새로운 부분을 추가했다.일반Example
과 달리 여기Base
와 AssociatedType
두 가지 유형의 속박이 있다.이외에도 Example
와 동일
또 여기서 특별히 ExampleCompatible
의extension
를 삭제했다.Array
진입ExampleWithSingleAssociatedType
이지만 통상적인 유형진입Example
이기 때문에 extension ExampleCompatible
에서 직접 정의ex
하면 물품에 따라 다른 유형ex
으로 되돌아갈 수 있기 때문에 아래Array.swift
부분과 같이 직접형 확장에 정의한다.
Array.swift
다음은 Array.swift
에서 먼저 확장Array
을 적용ExampleCompatible
한다.이것은 일반적인 유형의 확장을 만들 때와 같다.그러나 여기에는 직접ex
의 반환 값을 정의해야 한다.되돌아오는 값의 유형은 보십시오 ExampleWithSingleAssociatedType<Array<Element>, Element>
.즉 ExampleWithSingleAssociatedType
의Base
는Array<Element>
,AssociatedType
는Array.Element
이다.
여기에 정의할 수 있다면, 그 다음은 일반 형식 Example
의 확장과 같이, 확장 ExampleWithSingleAssociatedType
이다.제한은 Base == Array<AssociatedType>
입니다.
확장에서 random: AssociatedType?
속성을 정의합니다.내용은 자신의 무작위 요소만 간단하게 되돌려준다(단 빈 배열에서 되돌려준다nil
.
Playground.swift
이를 할 수 있다면Playground
열기[1, 2, 3].ex.random
, 자동1
, 2
, 3
에서 명령을 사용하여 무작위 수를 되돌릴 수 있다.맞죠?간단하죠?
Aray 이외에 적용
상기ExampleWithSingleAssociatedType
의 정의를 보면 Base
와 AssociatedType
두 가지 유형의 속박이 있기 때문에 Array
뿐만 아니라 자신에게 하위적인 속박이 있는 유형도 기본적으로 적용될 수 있다.예를 들면 Range<Bound>
같은 거요.작법은 Array.swift
내용의 Array
를 Range
, Element
로 간단하게 고쳐 쓰면 된다.
그렇다면 두 개의 하위형 속박이 있는 것, 예를 들면 Bound
을 어떻게 하면 좋을지 말하자면 이것도 매우 간단하다. 방금 추가Dictionary<Key, Value>
한 것과 같이 다른 것ExampleWithSingleAssociatedType<Base, AssociatedType>
ExampleWithDualAssociatedType<Base, AssociatedType1, AssociatedType2>
을 정의하고 struct
갚은 것Dictionary
의ex
을 쓰면 된다.뭐, 형식적 구속이 증가하면 쓰기에 게으르겠네 w
잡담
상술한 것은 일반인을 향한 것이다(?)자신의 이름Eltaso은 ExampleWithDualAssociatedType<Dictionary<Key, Value>, Key, Value>
이 아니라 Example
로 명명되었고 확장은 EltasoContainer
의 이름이다.가까스로 이름 충돌을 피하기 위해 이런 문법을 도입했지만 같은 문법의 총서eltaso
를 도입해 이름이 충돌하면 쉽지 않다.따라서 여러분은 스스로 이 맞춤법을 도입할 때 ex
대신 다른 이름으로 쓰는 것이 비교적 안전하다고 생각합니다.
참고로 이 확장 방법은 엘타소의 4.0에서 공개될 예정이지만 이 버전에서는 이 외에도 방법체인에 대한 대응조치가 실시될 예정이다(큰 실용성은 말할 것도 없다).업무량이 상당히 많아서 4.1이면 실현될 수 있을지도 모르지만 현재의 대응 상황을 먼저 살펴보면 바로 이런 느낌입니다.
연기도 생각보다 나쁘지 않았다.
나의 애인
Reference
이 문제에 관하여(Aray와 Dictionary에도 트렌디한 extension이 설치되어 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lovee/items/0ef70534375ecb19e441
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
한 마디로 하면 이 글에서 보다 보편적인 문법을 공유하고 싶어서 위의 것과는 조금 다르다
[1, 2, 3].ex.random
를 목표로 삼고 싶습니다.미리 준비하다
대체로여기 기사.에 바탕을 둔 것이기 때문에 그쪽 기사를 보면서 이 글을 읽으면 이해하기 쉬울 것 같다.또한 가능하다면 이 설치 방법을 먼저 기억하는 것이 좋다Array
.
이루어지다
ExampleCompatible.swiftpublic protocol ExampleCompatible {
associatedtype CompatibleType
var ex: CompatibleType { get }
}
public struct Example<Base> {
let base: Base
}
public struct ExampleWithSingleAssociatedType<Base, AssociatedType> {
let base: Base
}
Array.swiftextension Array: ExampleCompatible {
public var ex: ExampleWithSingleAssociatedType<Array<Element>, Element> {
return ExampleWithSingleAssociatedType(base: self)
}
}
extension ExampleWithSingleAssociatedType where Base == Array<AssociatedType> {
public var random: AssociatedType? {
guard !self.base.isEmpty else {
return nil
}
let index = Int(arc4random_uniform(UInt32(self.base.count)))
return self.base[index]
}
}
Playground.swift[1, 2, 3].ex.random // 2
해설
ExampleCompatible.swift
우선 ExampleCompatible
부분에 대해 알고 있는 바와 같이 Example<Base>
외에 ExampleWithSingleAssociatedType<Base, AssociatedType>
라는 새로운 부분을 추가했다.일반Example
과 달리 여기Base
와 AssociatedType
두 가지 유형의 속박이 있다.이외에도 Example
와 동일
또 여기서 특별히 ExampleCompatible
의extension
를 삭제했다.Array
진입ExampleWithSingleAssociatedType
이지만 통상적인 유형진입Example
이기 때문에 extension ExampleCompatible
에서 직접 정의ex
하면 물품에 따라 다른 유형ex
으로 되돌아갈 수 있기 때문에 아래Array.swift
부분과 같이 직접형 확장에 정의한다.
Array.swift
다음은 Array.swift
에서 먼저 확장Array
을 적용ExampleCompatible
한다.이것은 일반적인 유형의 확장을 만들 때와 같다.그러나 여기에는 직접ex
의 반환 값을 정의해야 한다.되돌아오는 값의 유형은 보십시오 ExampleWithSingleAssociatedType<Array<Element>, Element>
.즉 ExampleWithSingleAssociatedType
의Base
는Array<Element>
,AssociatedType
는Array.Element
이다.
여기에 정의할 수 있다면, 그 다음은 일반 형식 Example
의 확장과 같이, 확장 ExampleWithSingleAssociatedType
이다.제한은 Base == Array<AssociatedType>
입니다.
확장에서 random: AssociatedType?
속성을 정의합니다.내용은 자신의 무작위 요소만 간단하게 되돌려준다(단 빈 배열에서 되돌려준다nil
.
Playground.swift
이를 할 수 있다면Playground
열기[1, 2, 3].ex.random
, 자동1
, 2
, 3
에서 명령을 사용하여 무작위 수를 되돌릴 수 있다.맞죠?간단하죠?
Aray 이외에 적용
상기ExampleWithSingleAssociatedType
의 정의를 보면 Base
와 AssociatedType
두 가지 유형의 속박이 있기 때문에 Array
뿐만 아니라 자신에게 하위적인 속박이 있는 유형도 기본적으로 적용될 수 있다.예를 들면 Range<Bound>
같은 거요.작법은 Array.swift
내용의 Array
를 Range
, Element
로 간단하게 고쳐 쓰면 된다.
그렇다면 두 개의 하위형 속박이 있는 것, 예를 들면 Bound
을 어떻게 하면 좋을지 말하자면 이것도 매우 간단하다. 방금 추가Dictionary<Key, Value>
한 것과 같이 다른 것ExampleWithSingleAssociatedType<Base, AssociatedType>
ExampleWithDualAssociatedType<Base, AssociatedType1, AssociatedType2>
을 정의하고 struct
갚은 것Dictionary
의ex
을 쓰면 된다.뭐, 형식적 구속이 증가하면 쓰기에 게으르겠네 w
잡담
상술한 것은 일반인을 향한 것이다(?)자신의 이름Eltaso은 ExampleWithDualAssociatedType<Dictionary<Key, Value>, Key, Value>
이 아니라 Example
로 명명되었고 확장은 EltasoContainer
의 이름이다.가까스로 이름 충돌을 피하기 위해 이런 문법을 도입했지만 같은 문법의 총서eltaso
를 도입해 이름이 충돌하면 쉽지 않다.따라서 여러분은 스스로 이 맞춤법을 도입할 때 ex
대신 다른 이름으로 쓰는 것이 비교적 안전하다고 생각합니다.
참고로 이 확장 방법은 엘타소의 4.0에서 공개될 예정이지만 이 버전에서는 이 외에도 방법체인에 대한 대응조치가 실시될 예정이다(큰 실용성은 말할 것도 없다).업무량이 상당히 많아서 4.1이면 실현될 수 있을지도 모르지만 현재의 대응 상황을 먼저 살펴보면 바로 이런 느낌입니다.
연기도 생각보다 나쁘지 않았다.
나의 애인
Reference
이 문제에 관하여(Aray와 Dictionary에도 트렌디한 extension이 설치되어 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lovee/items/0ef70534375ecb19e441
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ExampleCompatible.swift
public protocol ExampleCompatible {
associatedtype CompatibleType
var ex: CompatibleType { get }
}
public struct Example<Base> {
let base: Base
}
public struct ExampleWithSingleAssociatedType<Base, AssociatedType> {
let base: Base
}
Array.swiftextension Array: ExampleCompatible {
public var ex: ExampleWithSingleAssociatedType<Array<Element>, Element> {
return ExampleWithSingleAssociatedType(base: self)
}
}
extension ExampleWithSingleAssociatedType where Base == Array<AssociatedType> {
public var random: AssociatedType? {
guard !self.base.isEmpty else {
return nil
}
let index = Int(arc4random_uniform(UInt32(self.base.count)))
return self.base[index]
}
}
Playground.swift[1, 2, 3].ex.random // 2
해설
ExampleCompatible.swift
우선 ExampleCompatible
부분에 대해 알고 있는 바와 같이 Example<Base>
외에 ExampleWithSingleAssociatedType<Base, AssociatedType>
라는 새로운 부분을 추가했다.일반Example
과 달리 여기Base
와 AssociatedType
두 가지 유형의 속박이 있다.이외에도 Example
와 동일
또 여기서 특별히 ExampleCompatible
의extension
를 삭제했다.Array
진입ExampleWithSingleAssociatedType
이지만 통상적인 유형진입Example
이기 때문에 extension ExampleCompatible
에서 직접 정의ex
하면 물품에 따라 다른 유형ex
으로 되돌아갈 수 있기 때문에 아래Array.swift
부분과 같이 직접형 확장에 정의한다.
Array.swift
다음은 Array.swift
에서 먼저 확장Array
을 적용ExampleCompatible
한다.이것은 일반적인 유형의 확장을 만들 때와 같다.그러나 여기에는 직접ex
의 반환 값을 정의해야 한다.되돌아오는 값의 유형은 보십시오 ExampleWithSingleAssociatedType<Array<Element>, Element>
.즉 ExampleWithSingleAssociatedType
의Base
는Array<Element>
,AssociatedType
는Array.Element
이다.
여기에 정의할 수 있다면, 그 다음은 일반 형식 Example
의 확장과 같이, 확장 ExampleWithSingleAssociatedType
이다.제한은 Base == Array<AssociatedType>
입니다.
확장에서 random: AssociatedType?
속성을 정의합니다.내용은 자신의 무작위 요소만 간단하게 되돌려준다(단 빈 배열에서 되돌려준다nil
.
Playground.swift
이를 할 수 있다면Playground
열기[1, 2, 3].ex.random
, 자동1
, 2
, 3
에서 명령을 사용하여 무작위 수를 되돌릴 수 있다.맞죠?간단하죠?
Aray 이외에 적용
상기ExampleWithSingleAssociatedType
의 정의를 보면 Base
와 AssociatedType
두 가지 유형의 속박이 있기 때문에 Array
뿐만 아니라 자신에게 하위적인 속박이 있는 유형도 기본적으로 적용될 수 있다.예를 들면 Range<Bound>
같은 거요.작법은 Array.swift
내용의 Array
를 Range
, Element
로 간단하게 고쳐 쓰면 된다.
그렇다면 두 개의 하위형 속박이 있는 것, 예를 들면 Bound
을 어떻게 하면 좋을지 말하자면 이것도 매우 간단하다. 방금 추가Dictionary<Key, Value>
한 것과 같이 다른 것ExampleWithSingleAssociatedType<Base, AssociatedType>
ExampleWithDualAssociatedType<Base, AssociatedType1, AssociatedType2>
을 정의하고 struct
갚은 것Dictionary
의ex
을 쓰면 된다.뭐, 형식적 구속이 증가하면 쓰기에 게으르겠네 w
잡담
상술한 것은 일반인을 향한 것이다(?)자신의 이름Eltaso은 ExampleWithDualAssociatedType<Dictionary<Key, Value>, Key, Value>
이 아니라 Example
로 명명되었고 확장은 EltasoContainer
의 이름이다.가까스로 이름 충돌을 피하기 위해 이런 문법을 도입했지만 같은 문법의 총서eltaso
를 도입해 이름이 충돌하면 쉽지 않다.따라서 여러분은 스스로 이 맞춤법을 도입할 때 ex
대신 다른 이름으로 쓰는 것이 비교적 안전하다고 생각합니다.
참고로 이 확장 방법은 엘타소의 4.0에서 공개될 예정이지만 이 버전에서는 이 외에도 방법체인에 대한 대응조치가 실시될 예정이다(큰 실용성은 말할 것도 없다).업무량이 상당히 많아서 4.1이면 실현될 수 있을지도 모르지만 현재의 대응 상황을 먼저 살펴보면 바로 이런 느낌입니다.
연기도 생각보다 나쁘지 않았다.
나의 애인
Reference
이 문제에 관하여(Aray와 Dictionary에도 트렌디한 extension이 설치되어 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lovee/items/0ef70534375ecb19e441
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
상기
ExampleWithSingleAssociatedType
의 정의를 보면 Base
와 AssociatedType
두 가지 유형의 속박이 있기 때문에 Array
뿐만 아니라 자신에게 하위적인 속박이 있는 유형도 기본적으로 적용될 수 있다.예를 들면 Range<Bound>
같은 거요.작법은 Array.swift
내용의 Array
를 Range
, Element
로 간단하게 고쳐 쓰면 된다.그렇다면 두 개의 하위형 속박이 있는 것, 예를 들면
Bound
을 어떻게 하면 좋을지 말하자면 이것도 매우 간단하다. 방금 추가Dictionary<Key, Value>
한 것과 같이 다른 것ExampleWithSingleAssociatedType<Base, AssociatedType>
ExampleWithDualAssociatedType<Base, AssociatedType1, AssociatedType2>
을 정의하고 struct
갚은 것Dictionary
의ex
을 쓰면 된다.뭐, 형식적 구속이 증가하면 쓰기에 게으르겠네 w잡담
상술한 것은 일반인을 향한 것이다(?)자신의 이름Eltaso은 ExampleWithDualAssociatedType<Dictionary<Key, Value>, Key, Value>
이 아니라 Example
로 명명되었고 확장은 EltasoContainer
의 이름이다.가까스로 이름 충돌을 피하기 위해 이런 문법을 도입했지만 같은 문법의 총서eltaso
를 도입해 이름이 충돌하면 쉽지 않다.따라서 여러분은 스스로 이 맞춤법을 도입할 때 ex
대신 다른 이름으로 쓰는 것이 비교적 안전하다고 생각합니다.
참고로 이 확장 방법은 엘타소의 4.0에서 공개될 예정이지만 이 버전에서는 이 외에도 방법체인에 대한 대응조치가 실시될 예정이다(큰 실용성은 말할 것도 없다).업무량이 상당히 많아서 4.1이면 실현될 수 있을지도 모르지만 현재의 대응 상황을 먼저 살펴보면 바로 이런 느낌입니다.
연기도 생각보다 나쁘지 않았다.
나의 애인
Reference
이 문제에 관하여(Aray와 Dictionary에도 트렌디한 extension이 설치되어 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lovee/items/0ef70534375ecb19e441
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Aray와 Dictionary에도 트렌디한 extension이 설치되어 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lovee/items/0ef70534375ecb19e441텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)