- Total
목록전체 글 (209)
꿈꾸는리버리
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/caWtff/btrHiG70HiH/QrNGd4uHKuGyKPg12rRNKK/img.png)
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 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/36jU9/btrHkorpwWF/hmzLwad9Kk6qwLelzpIJj0/img.png)
이전 블로그에서 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의 경우에는 해당 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bNOdfk/btrHiWWQWMA/8SuZs6N4YVsgAV0QcTxrzk/img.png)
UserDefaults란? UserDefaults는 어떨때 쓰나요 ? 앱을 껐다 켜도 이 디바이스에 계속 값이 저장되었으면 좋겠어요 ~ 하는 것들 ! -> 나 홀로 방구석에서 신기해했던 건데, ㅎㅎ 시뮬레이터랑 프리뷰의 기기가 달라서 userdefault가 다르고, 시뮬레이터안에서의 기기종이 다르면 저장된 userdefault도 다르다 ! UserDefaults는 어떻게 쓰나요 ? key-value 쌍으로 저장이되기 때문에, key 값을 통해 로드할 수 있다. UserDefaults 추가 상식 1) 현재 프로세스 내에서 동기적으로 변경되고 영구 저장소 및 기타 프로세스에선 비동기적으로 변경 2) NSDate, NSString, NSNumber, NSData, NSArray, NSDictionary 들은 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/K5hHA/btrG2Z0kaWA/8MiCdhkEU9ic4dduXwFwB0/img.png)
결과부터 보여주자면, 이렇게 ! PR을 날렸을 때 깃헙 내에서 빌드가 되고 안되었음을 확인할 수 있다 ! ( 초록 체크와 빨간 엑스 ) 이렇게 되면, X가 뜬 PR은 보낸 사람은 pull 당겨서 고친 후에 push를 날려서 build가 되었을 때 다른 사람이 코드리뷰를 다는 게 좋겠죠 ??..??!?! 테스트를 하는데에도 사용이 되지만 나는.. 빌드 여부만 확인하면 되었기 때문에 ! ㅎㅎ .. 빌드 확인만 한다..! 방법 1) github의 레포에서 Action -> swift 검색 -> Configure 선택 2) 그러면 .github/workflows에 swift.yml이라는 파일에 저절로 아래와 같은 값들이 입력된다. workflow는 만들고자 하는 목적에 맞게 변경하면 된다. 나는 .. 안 해봤지..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Grcko/btrGY2DdmCA/3VUIeNQubkEXOWkyJ7HJtK/img.png)
왜 사용하죠 ...? SwiftLint를 이전 챌린지에서 협업 때 사용해본 결과,, 통상적으로 사람들이 사용하는 code convention을 따르게 되어가고 있는 것 같았고, 팀원들과 비슷한 코드를 짜고 있다는 생각이 들어서 이번 챌린지에도 swiftLint를 도입하기로 했다 ! Lint란? Lint는 소스코드를 분석해서 코드 스타일이나 프로그램의 오류가 발생할 수 있는 부분을 찾아주는 도구로 활용된다. SwiftLint는 Swift언어에서 규칙에 어긋나는 코드를 찾아내서 경고 또는 빌드에러를 반환해준다. 1) Podfile에 pod 'SwiftLint'추가한 뒤 pod install 우선 .xcodeproj 가 있는 폴더(여기서는 cloneStanFord)를 터미널로 연다. 이 깃헙의 내용을 따라하면..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2wYk4/btrG3Jpm4hu/HaNXTKJbmAd13mHnUCpdt0/img.png)
한국어 영어 둘 다 사용 가능한 다국어 앱을 만들기 위해 고군분투한 이야기.. 다국어 설정하기 1) command + N -> Strings File 만들기 반드시 이름은 Localizable.strings 으로 ! 2) Localizable.strings 파일에서의 인스펙터에서 localization 설정 3) 이렇게 두 언어를 넣어주면, 다음과 같이 설정이 가능하다 ! Text("hi") 이제 이렇게 치면 자동적으로 한국 지역 설정이 되어 있는 앱에서는 hi 대신 안녕이라고 읽힌다 ! 주의) 반드시 세미콜론을 넣어야 한다 ! 4) 만약 ,, 변수도 같이 넣고 싶다면? Text("hi, \(name)") -> 이 경우에는 아래와 같이 하면된다 "hi, %@" = "안녕, %@"; + 정수인 경우에는 %..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b6D2fv/btrGRxQmxoR/KePix8PcyrDTbpsHB53gF1/img.png)
assert assert는 런타임에 특정 조건을 체크하고, 조건이 성립되지 않으면 시뮬레이터가 멈추고 에러 메세지를 출력한다 ! 언제 사용 ? assert 함수는 디버깅 모드에서만 동작하기 때문에 배포하는 앱 성능에는 영향을 끼치지 않는다는 특징이 있다. 이러한 특성을 갖기 때문에 assert문은 디버깅 중 앱 배포 전 검증을 위하여 API 테스트 등, 조건 체크 및 테스트를 해야할 때 유용하게 사용될 수 있다. +) 디버그와 릴리즈 빌드 모두를 검증하기 위해서는 precondition()을 사용한다. 궁금증 ) -0 builds, Release configuration.. -Ounchecked builds.. 구글링을 통해서 일반 시뮬레이션을 돌릴때는 에러처리가 되고 실 배포가 될 때는 assert가 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/qX1u6/btrGyOspytS/5LpSyiL9fMo1zaWcszEgIK/img.png)
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..