• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

이렇게 구현하는거 맞나요?

21.05.14 06:34 작성 조회수 111

0

자바랑 자바스크립트만 할 줄 알고 스위프트는 살짝 해본게 전부인데, 생각보다 쉽지 않네요 

마지막에 내주신 문제 += 에 대한 연산 메소드에 대해서 구현해봤는데 이렇게 하는게 맞나요?

extension Point {

    static func +=(p1: inout Point, p2: Point) -> Point {

        let ret = p1

        p1.x += p2.x

        p1.y += p2.y

        return ret

    }

}

var point1 = Point(x: 1.0, y: 2.0)

let point2 = Point(x: 3.0, y: 4.0)

point1 += point2

point1

일단 결과값으로 x, y 각각 4.0, 6.0 이 나와서 잘 작동하는것 처럼 보입니다.

그리고 inout은 값의 변화가 있는 파라미터에만 넣어주면 되는거 맞죠?

좋은 강의 감사합니다.

답변 2

·

답변을 작성해보세요.

1

twosom님의 프로필

twosom

질문자

2021.05.14

extension Point {

    static func +=(value1: inout Point, value2: Point){

        value1.x += value2.x

        value1.y += value2.y

    }

}

var p6 = Point(x: 1.0, y: 2.0)

let p7 = Point(x: 3.0, y: 4.0)

p6 += p7

p6

이렇게 구했습니다. inout 파라미터인 value1 의 값만 수정되도록 하면 되는거군요! 근데 모르고 - Void 를 적지 않았는데도 동작하는것 보니 Swift 에서 리턴 타입이 Void 인 경우 생략해도 되나봐요!

1

안녕하세요 :) 

a += b 연산의 결과는 a = a + b 와 같고, 할당 연산자로 분류됩니다. Swift에서 할당 연산자는 연산 결과를 리턴하지 않습니다. 그래서 

var a = 12
let r = a += 34

이 코드를 실행해 보시면 r의 타입은 Int가 아니라 Void입니다.

도전과제 역시 리턴 값을 사용하지 않고 inout 파라미터를 통해 값을 업데이트하도록 구현하셔야 합니다. p1 파라미터를 활용해서 동일한 결과를 얻도록 수정해 보시기 바랍니다.

twosom님의 프로필

twosom

질문자

2021.05.14

감사합니다! 다시한번 구현해보도록 하겠습니다