Swift(14)
-
[Swift] 피보나치 수열 만들어보기
답이 여럿이겠지만, 끄적여 보았다. class Fibonacci { func fibonacci(n: Int) { var fiboArray = [0,1] var index = 0 func sum(a: Int, b: Int) -> Int { return a + b } if n == 1 { print([fiboArray[0]]) } else if n == 2 { print([fiboArray[0], fiboArray[1]]) } else if n >= 3 { while index < n - 2 { let nextNumber = sum(a: fiboArray[index], b: fiboArray[index+1]) fiboArray.append(nextNumber) index += 1 } print(fiboArr..
2020.04.14 -
[Swift] MARK: - 나만의 주석으로 코드 구역설정하기
MARK: - 가 뭔데? 같은 파일 내에서 직접적인 관련이 있는 부분끼리 서로 묶어주는 구역설정의 방법. 구분선이 생김과 동시에, Xcode 내부에서도 따로 관리해준다. 왜 필요한데? 아무리 MVC패턴이나 delegate 패턴 등으로 파일을 분리하더라도, 한 파일에서의 코드가 길어질 수 있다. 코드가 밑으로 길어지면 가독성이 떨어지기 마련이다. LongCode를 ViewController라고 생각해보자. 그럼 LongCode가 채택한 Protocol1과 Protocol2는 모두 이 App의 View 부분을 관리하는 것이다. 그런데 이제는 현재 .swift 파일의 코드가 더 길어졌다고 생각해보자. 그렇다고 가독성을 위해 이 Protocol1과 Protocol2 마저 다른 파일로 분리해버린다면, 이는 코드의..
2020.04.13 -
[Swift] Extension : 원래 있던 class/struct에 커스텀 기능추가하기
Extension이 뭔데? Extension은 이름 그대로 확장을 해준다는 것이다. 무엇을 확장하고 왜 필요한데? Apple은 기본적으로 버튼, Label, 자료형들을 Class의 형태로 제공하고 있고, 각 Class는 내부에 많은 함수(기능)들을 가지고 있다. 하지만 개발자마다 취향이 다르고, 또한 프로젝트마다 해결해야 할 과제는 제각각이기 때문에, Apple은 그 모든 경우의 수를 다 고려해서 Xcode를 배포할 수 없다. 이러한 이유로 개발자 각각 처한 상황에 맞게 스스로 코드들을 수정, 커스터마이징 할 수 있도록 하기 위하여, Extension이 등장한 것이다. 어떻게 쓰는지 반올림 예제를 통해 알아보자. 실수 자료형인 Double 클래스에는 반올림을 담당하는 round() 함수가 있다. 하지만 ..
2020.04.13 -
[Swift] 함수에 인수가 뭐이리 많아? _ 는 무엇? (feat. Parameter vs Argument)
#1. 함수에 인수가 뭐이리 많아 보이는 경우 // 함수 정의부 func 함수이름(함수호출시사용할인수별명 실제인수이름: 인수데이터타입) { } // 함수 호출부 함수이름(함수호출시사용할인수별명: 인수데이터타입) #2. _가 껴있는 경우 // 함수 정의부 func 함수이름(_ 인수: 인수데이터타입) { } // 함수 호출부 함수이름(인수) 함수는 언어를 막론하고 친해질? 수 밖에 없는 타입인데, Swift에서는 사뭇 다른 함수 모양 때문에 혼란스러울 것이다. 왜냐하면 Swift에서는 다른 언어들과는 달리 함수이름 옆의 소괄호() 속에 뭔가 더 많이 들어있는 경우가 많기 때문이다, 사실 이는 가독성을 높이기 위한 차원에서 Argument에 이름을 붙여주기 때문에 나타나는 현상이다. Parameter와 Arg..
2020.04.12 -
[Swift 고급] Protocol X Delegate : 코드 리팩토링과 파일 간 데이터 전송의 끝판왕
Protocol과 Delegate 개념이 왜 필요한데? 이전에 Protocol을 다룬 적이 있다. 이번 시간을 이해하기 위해서는 Protocol의 이해가 필수이므로 다시 한번 정리하고 시작해보겠다. Protocol이란, 말그대로 "정해놓은 규칙"이라는 뜻이다. 그래, 말은 참 쉽다. 그런데 Protocol이 도대체 뭐길래, 즐거웠던 앱개발 초보의 길에 갑자기 나타나서 큰 산으로 와닿는 것일까? 축하한다. Protocol에 온 이상 우리는 초보를 벗어난 것이다. 초보시절 비교적 간단한 Toy 앱에서는 데이터나 네비게이션이 많이 필요없다. 그렇기 때문에 .swift 파일의 개수 역시 상당히 적고, 따라서 내가 코드를 발로 짜도 몇 줄 내로 금방 눈에 띄기 때문에 수정하기도 쉽다. 하지만 적어도 진짜 App을..
2020.04.12 -
[Swift] Computed Property : 생성자에 없어도 자동생성 해주는 변수
우리는 효과적인 코드 사용을 위해 Class나 Struct를 짜서 사용한다. struct Tazza { let name: String let homeTown: String let todayCondition: Int } 수많은 사례들을 공장처럼 편하게 찍어낼 수 있기 때문이다. let goni = Tazza(name: "Kim Gon", homeTown: "namwon", todayCondition: 99) let gwangryul = Tazza(name: "Go Gwang Ryul", homeTown: "Busan", todayCondition: 77) 즉 위와 같은 기본 방식은 인스턴스화 될 때 name과 homeTown, todayCondition 3가지 항목이 애초에 필요하며 그대로 저장됨을 명확히..
2020.04.12