Skip to content
This repository was archived by the owner on Sep 22, 2019. It is now read-only.

Commit 4467611

Browse files
committed
assignment의 간단한 예제
1 parent c4b5ad1 commit 4467611

File tree

1 file changed

+56
-2
lines changed

1 file changed

+56
-2
lines changed

CHAPTER05/README.md

+56-2
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ precedencegroup SqurePrecedence {
438438
higherThan: MultiplicationPrecedence // 더 낮은 우선순위 그룹
439439
lowerThan: BitwiseShiftPrecedence // 더 높은 우선순위 그룹
440440
associativity: right // 결합방향(left / right / none)
441-
assignment: false // 할당방향 사용(true / false)
441+
assignment: false // 할당사용(true / false)
442442
}
443443

444444
infix operator **: SqurePrecedence // SqurePrecedence를 적지 않으면 DefaultPrecedence를 갖는다.
@@ -526,5 +526,59 @@ struct SmartPhone {
526526
}
527527
}
528528
```
529+
529530
타입 메서드로 구현한 사용자정의 연산자는 각 타입의 익스텐션으로 구현해도 된다.
530-
익스텐션을 통해 타입 메서드로 구현한 사용자 정의 메서드는 [익스텐션으로 추가할 수 있는 기능](./../CHAPTER21/README.md)에서 확인 가능하다.
531+
익스텐션을 통해 타입 메서드로 구현한 사용자 정의 메서드는 [익스텐션으로 추가할 수 있는 기능](./../CHAPTER21/README.md)에서 확인 가능하다.
532+
533+
### assignment의 간단한 예제
534+
535+
```swift
536+
class A {
537+
var num: Int?
538+
}
539+
540+
class B {
541+
var a: A?
542+
}
543+
544+
class C {
545+
var b: B?
546+
}
547+
548+
precedencegroup SqurePrecedence {
549+
higherThan: MultiplicationPrecedence // 더 낮은 우선순위 그룹
550+
lowerThan: BitwiseShiftPrecedence // 더 높은 우선순위 그룹
551+
associativity: right // 결합방향(left / right / none)
552+
assignment: true // 할당사용(true / false)
553+
}
554+
555+
infix operator **: SqurePrecedence // SqurePrecedence를 적지 않으면 DefaultPrecedence를 갖는다.
556+
func **(lhs: Int?, rhs: Int?) -> Int? {
557+
var ret: Int = 1;
558+
if rhs! > 0 {
559+
for _ in 1 ... rhs! {
560+
ret *= lhs!
561+
}
562+
} else if rhs! < 0 {
563+
// 마이너스 지수에 대한 계산
564+
}
565+
566+
return ret;
567+
}
568+
569+
var c: C? = C()
570+
print(c?.b?.a?.num ** 2)
571+
572+
// assignment가 false 일때 위와 같이 사용 했을때 뜨는 런타임에러
573+
/*
574+
error: Playground execution aborted: error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
575+
The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.
576+
*/
577+
578+
// assignment가 false 일때 모든 옵셔널값이 들어가 있다면 런타임에러는 뜨지 않는다.
579+
// c?.b = B()
580+
// c?.b?.a = A()
581+
// c?.b?.a?.num = 10
582+
// print(c?.b?.a?.num ** 2)
583+
```
584+

0 commit comments

Comments
 (0)