with는 매개변수로 receiver : T와 block : T.()-> R을 받는다.
T를 block의 매개변수로 전달해서 그 반환값을 반환한다.
with는 세이프콜 ?. 을 지원하지 않아서 let과 같이 사용하는 경우가 많다.
with는 매개변수 2개를 필요로 해서 이제까지 배운 함수들과 달리 람다식 {} 앞에 매개변수를 위한 ()가 하나 있다.
let과 함꼐 사용할 경우 it을 인자로 받는다. 아닐 경우 사용할 매개변수를 ()에 넣어주면 된다.
이렇게 let과 with를 같이 사용하는 것은 사실 run을 사용하는 것과 동일하다.
with로 user 변수를 인자로 받아서 람다식에서 멤버를 설정해준다.
람다식의 마지막 줄을 반환하는데 따로 반환할 내용을 작성하지 않아서 Unit이 반환되었다.