Why Coding like This ?—— 귀속 & 매거 중의 귀속
Topic 1:
그룹 xs:[Int]를 입력하여 전체 요소의 합을 구합니다.
Discuss
Code:
func sum1(xs:[Int])->Int{
var sum:Int = 0
for x in xs{
sum += x
}
}
sum([2,3,5]) = 2 + sum([3,5]) = 2 + 3 + sum([5]) = 2 + 3 + 5 + sum([])
우리는 수조를 수원소와 잉여수조 원소로 구성된 수조로 분해하는 방식으로 귀속한다. 나머지 공수조구와 ( 0
까지 대수조[2,3,5]의 구화를 완성한다.구체적인 구와 함수를 다시 쓰기 전에 우리는 Array를 작게 확장하고 decompose 계산 속성을 추가해야 한다. 그의 역할은 현재 수조에 대한 분해 결과를 되돌려주는 것이다. 하나의 유형이 (head:T,tail:[T])?
인 원조는 수조에 공수조가 존재할 수 있기 때문에 이때 분해는 반드시nil로 되돌려져야 하기 때문에 이 원조가 선택할 수 있는 유형이라는 것을 이해하기 어렵지 않다.code
extension Array{
var decompose:(head:T,tail:[T])?{
// nil
//
// [x] x []
return (count > 0) ? (self[0],Array(self[1..
다음은 귀속을 사용하여sum2 함수를 실현하고 위의 이해를 통해 회색으로 쓰기를 좋아합니다.
func sum2(xs:[Int])->Int{
// nil 0
if let (head,tail) = xs.decompose{
return (head + sum2(tail)) //
}else{
return 0
}
}
이상은 귀속에 대한 간단한 맛보기입니다. 다음은 swift2.0 문법에서 처음으로 나타난 매거귀속용법을 이해합니다.
Topic 2:
매거진의 귀속 표현식(5+4)*2를 사용하여 값을 구합니다.
Discuss
먼저 표현식을 분석하면 주로 숫자(Number)와 연산자
+、-、*、/
로 나뉘는데 흔히 연산자의 양측은 각각number이다.따라서 만약 매거를 사용한다면 우리는 이렇게 정의할 것이다enum ArithmeticExpression{
case Number(Int)
indirect case Addition(ArithmeticExpression, ArithmeticExpression)
indirect case Multiplication(ArithmeticExpression, ArithmeticExpression)
//
}
indirect
키워드를 알아차렸습니까? 이것이 바로 매거 귀속을 지시하는 것입니다.데이터 구조를 정의하려면 표현식 해석에 사용할 함수가 필요합니다. 함수 전입ArithmeticExpression
유형 값은number 귀속 숫자일 수 있습니다. 예를 들어 .Number(5)
은 단일 숫자 5를 나타냅니다.연산자가 좌우로 연결된 연산 데이터일 수도 있다. 예를 들어 .Addition(5,4)
= 5 + 4.구체적으로 다음과 같다.func evaluate(expression: ArithmeticExpression) -> Int {
switch expression {
case .Number(let value):
return value
case .Addition(let left, let right):
return evaluate(left) + evaluate(right)
case .Multiplication(let left, let right):
return evaluate(left) * evaluate(right)
}
}
// (5 + 4) * 2
let five = ArithmeticExpression.Number(5)
let four = ArithmeticExpression.Number(4)
let sum = ArithmeticExpression.Addition(five, four)
let product = ArithmeticExpression.Multiplication(sum, ArithmeticExpression.Number(2))
print(evaluate(product))
// prints "18"
정부에서 제시한 예는 많은 친구들을 실망시킬 수 있다. 이것은 완전한 전입 표현식이 당신에게 값을 주는 예는 아니지만, 매거진의 귀속을 이해하게 한다.
참, 위 코드는 Xcode7 새 버전 베타에서만 실행할 수 있습니다.그렇지만!네, 코드를 swift1.2 문법에도 똑같이 적용하는 방법이 있습니다. 단지 작은 봉인이 필요합니다.
class Box{
let unbox : T
init(_ value:T){self.unbox = T}
}
// swift1.2
enum enumTypeError{
case type1(NSError)
case type2(T)
}
//
enum enumTypeSuccess{
case type1(NSError)
case type2(Box)
}
// challenge!
이 책은 공식 문서와 Functional Programming in swift를 참고하여 학습 노트로만 공유합니다.솔직히 이 글은 약간 물의가 있다. 사실 이전에는 scroll View의 비밀 문장을 먼저 만들고 주방장이 소를 풀고 기초부터 모든 것을 이야기하고 싶었지만 어쩔 수 없이 다 쓴 후에 물을 약간 흘렸다. 많은 사람들이 자신이 알지만 표현하지 못했기 때문에 다시 만들 생각이다!머지않아 여러분을 만날 수 있을 거라고 믿습니다.그리고 swift2.0의 최신 문법은 github에 업데이트되었습니다. 공식 8.24 최신 버전입니다.github 주소, 스타에서 당신도 나의 마이크로 블로그 주소에 관심을 가질 수 있기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.