- Total
목록오뚝이 개발자/swift (20)
꿈꾸는리버리
protocol.. 얇게 알았었던 protocol에 대해 이번 기회에 좀 더 깊게 공부해서 정리를 해보고자한다 ! 🌷 protocol이란? protocol은 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진(설계도)를 의미한다. 구조체, 클래스, 열거형은 정의된 프로토콜을 채택해서 특정 기능을 실행하기 위한 프로토콜의 요구사항을 직접 구현해야 한다. 이렇게 프로토콜의 요구사항을 모두 따르는 타입은 해당 프로토콜을 준수한다고 표현한다. -> 무슨 소리인가 싶은데,, 쉽게 말해서 "해당 protocol을 따르기 위해서는 protocol에 적혀있는 사항들을 모두 이행해야 한다" 라고 생각하면 이해하기 편하다. 그래서 처음배울때 "protocol == 약속"이라고 생각하세요~ 하는 거다. p..
Class와 Struct에 대해서 공부하다보니까 궁금한게 생겼다.. 관련 블로그 링크 : struct와 class의 차이 / Copy On Write와 Copy On Assign 질문 Class의 property로 있는 Struct은 Class의 인스턴스를 만들고 복사한 후 값을 변경하면 달라질까? 반대로 Struct의 propert로 있는 Class는 Struct의 인스턴스를 만들고 값을 복사한 후 값을 변경하면 달라질까? 말로하면 어려우니 코드를 보자.. ㅎㅎ 1) 이렇게 하면 class1.structInstance.number와 class1_Copy.structInstance.number는 값이 같을까? struct Struct1 { var number = 2 } class Class1 { var ..
이전 블로그에서 class와 struct의 차이에 대해서 알아봤었다. 해당 블로그에서 필요한 부분만 발췌.. // FoodClass와 FoodStruct에 인스턴스를 각각 만들고 대입을 해준다. // class var food1 = FoodClass(name: "핏자", calorie: 100) var food_1 = food1 food1.name = "핏자유~" food1.name //"핏자유~" food_1.name //"핏자유~" // struct var food2 = FoodStruct(name: "핏자", calorie: 100) var food_2 = food2 food2.name = "핏자유~" food2.name //"핏자유~" food_2.name //"핏자" class의 경우에는 해당 ..
왜 사용하죠 ...? SwiftLint를 이전 챌린지에서 협업 때 사용해본 결과,, 통상적으로 사람들이 사용하는 code convention을 따르게 되어가고 있는 것 같았고, 팀원들과 비슷한 코드를 짜고 있다는 생각이 들어서 이번 챌린지에도 swiftLint를 도입하기로 했다 ! Lint란? Lint는 소스코드를 분석해서 코드 스타일이나 프로그램의 오류가 발생할 수 있는 부분을 찾아주는 도구로 활용된다. SwiftLint는 Swift언어에서 규칙에 어긋나는 코드를 찾아내서 경고 또는 빌드에러를 반환해준다. 1) Podfile에 pod 'SwiftLint'추가한 뒤 pod install 우선 .xcodeproj 가 있는 폴더(여기서는 cloneStanFord)를 터미널로 연다. 이 깃헙의 내용을 따라하면..
assert assert는 런타임에 특정 조건을 체크하고, 조건이 성립되지 않으면 시뮬레이터가 멈추고 에러 메세지를 출력한다 ! 언제 사용 ? assert 함수는 디버깅 모드에서만 동작하기 때문에 배포하는 앱 성능에는 영향을 끼치지 않는다는 특징이 있다. 이러한 특성을 갖기 때문에 assert문은 디버깅 중 앱 배포 전 검증을 위하여 API 테스트 등, 조건 체크 및 테스트를 해야할 때 유용하게 사용될 수 있다. +) 디버그와 릴리즈 빌드 모두를 검증하기 위해서는 precondition()을 사용한다. 궁금증 ) -0 builds, Release configuration.. -Ounchecked builds.. 구글링을 통해서 일반 시뮬레이션을 돌릴때는 에러처리가 되고 실 배포가 될 때는 assert가 ..
1️⃣ Struct와 class의 공통점 1) 값과 function을 저장할 properties와 methods 정의 : 변수 및 상수를 객체에서는 properties라고 하고, function을 methods라고 함 class Food { let name: String = "음식" func printName() { print("name : \(self.name)") } } 2) " . "을 사용하여 값에 대한 액세스할 수 있음 class Food { let name: String = "음식" } let food = Food.init() food.name 3) 초기 상태를 설정하기 위한 initializer 정의 class Food { let name: String init(name: String){ s..
백준 풀다가 두개 개념이 다른가 ? 싶어서 찾아봤다 ! 공통점 두 method 모두 collection의 마지막 element를 제거하고 반환하는 method이다. 차이점 - popLast()는 반환값이 optional이다 ! var nums = [1, 2, 3] nums.removeLast() // 3 nums.removeLast() // 2 nums.removeLast() // 1 nums.popLast() // nil nums.removeLast() // 에러 ! 이렇게 배열의 값이 비었을 때 popLast()를 하면 nil 값이, removeLast()를 했을 때는 에러가 뜬다 ! 뭘 쓸까 ? 우선은 배열의 값이 무조건 있다고 확신하는 경우에는 removeValue() 메소드를 써도 되지만, 빈 ..
이전 포스팅에서 optional의 개념과 optional을 unwrapping하는 방법에 대해서 알아봤는데, 느낌적으로 optional binding을 하는 게 최고구나 ! 라는 것을 느꼈을 거다 ㅎㅎ 💡 optional chaining 이제 더 나아가서 optional binding과 함께 사용하면 좋은 optional chaining에 대해서 알아보자 ! 하단에는 한 사람의 주소를 나타내기 위한 struct들이다.. person -> address -> building -> room 이렇게 접근이 된다. struct Person{ var name : String var address : Address? } struct Address{ var city : String var building : Buil..