[인터뷰질문 003] tuples이란 무엇이고 어느 상황에서 유용하게 사용할 수 있습니까?

이미지
튜플이란? 튜플은 아주 작은 익명의 'struct'라고 생각하면 편합니다. 이게 무슨의미냐 하면, struct 라는 것을 생각해보면 다양한 타입의 프로퍼티 들이 들어갈 수 있습니다. Array 는 같은 타입만 넣을 수 있지만, 튜플은 여러 타입이 들어갈 수 있는 자료형 입니다. 예제 간단하고 익숙한 예제부터 설명 해보도록 하겠습니다. let student = ( "Leeo" , 17 ) print(student .0 , student .1 ) // Leeo 17 본인은 이름이 없고, student라는 변수에 할당했습니다. 그리고 현재는 구성 요소들의 이름이 없기 때문에 index 로 접근해야합니다. 다음은 이름을 줘 보도록 하겠습니다. let student = ( name : "Leeo" ,age: 17 ) print( student .name, student.age) // Leeo 17 코드를 살펴보면 값을 이름으로 접근할 수 있습니다. 마치 struct 같지 않나요? 그리고 보이는 바와 같이 여러개의 다른 타입의 값들을 type-safe 하게 반환할 수 있습니다. 위와 같은 방법을 활용하여 1회용 이라면 struct 를 선언하지 않고 여러개의 값을 반환할 수 있습니다.

[인터뷰질문 002] Swfit에서 class와 struct의 차이점이 무엇인가요?

이미지
https://www.hackingwithswift.com/interview-questions/what-are-the-main-differences-between-classes-and-structs-in-swift 값 타입, 참조 타입 많은 분들이 머리로는 다 알고 있는 부분일것이라 생각합니다. 저도 class 는 reference type 이고, struct 는 value types이다. 라고 알고 있습니다. 그게 무슨 뜻일까요? 쉽게 비유하면, 엑셀과 스프레드 시트로 할 수 있습니다. 여러분이 하나의 엑셀을 만들고 다른 동료에게 보내고 난 다음에, 그 엑셀이 어떻게 되었는지는 관심도 없고 나에게 영향을 주지 않죠. 하지만 내가 스프레드 시트를 만들어서 전해주면, 다른사람이 내가 만든 결과물에 영향을 줄 수 있습니다. 너무 동떨어진 예제라면 아래 코드로 이해해 보도록 하겠습니다. struct Student { var na me: String var a ge: Int } 간단한 예제의 struct 가 있습니다. name 과 age 를 가지고 있습니다. let firstStudent = Student(name: "Leeo_student" , age: 17 ) print (firstStudent.name, firstStudent.age) // Leeo_student 17 var secondStudent = firstStudent secondStudent .name = "batgird_student" secondStudent .age = 18 print (firstStudent.name, firstStudent.age) // Leeo_student 17 print (secondStudent.name, secondStudent.age) // batgird_student 18 처음에 생성하고 바로 출력해보면, 생성한 결과가 나오니 이상하진 않습니다. 그리고 두번째 변수를 만

06. IOS 클론코딩 CandySearch

이미지
테이블 뷰를 쓰다보면, 항상 검색하는 부분이 있는데 처음 이런 뷰를 보았을 때 SearchController 를 몰라서 textField 로 구현하려다가 대 망했던 기억이 있네요. 이 글을 보시는 분들 중 저와 같은 분이 계시다면 꼭 SearchController 을 좀 더 살펴보시고 구현하는걸 추천 드립니다! 앱 구조 구조는 매우 심플 합니다. 메인 테이블 뷰와 디테일 뷰 두 개로 이루어져있습니다. 메인 테이블 뷰에는 서치컨트롤러가 있어서 검색 기능이 있습니다. 네비게이션 바의 색을 칠하는 방법은 이전 프로젝트 에서 익혔기 때문에 그대로 가져다 사용했습니다. 메인 페이지에 가운데 로고를 넣고, 서치컨트롤러를 넣는데 고생을 했습니다. 결론적으로 가운데로고는 네비게이션 아이템에 뷰를 넣어서 이미지를 넣었습니다. 그리고 서치 컨트롤러는 navigationItem .searchController = searchController 이렇게 넣어주었습니다. 그리고 그 아래에 이쁜 scopeButton 은 처음 넣어 보는 것 이었는데, 아래 코드로 넣었습니다. searchController.searchBar.scopeButtonTitles = ["All", "Chocolate", "Hard", "Other"] 이 색상을 입히는 작업이 생각보다 쉽지 않았는 커스텀한 설정을 넣는 방법이 익숙하지 않아서 그랬던 것 같습니다. 좀 더 쉬운 방법이 있다면 댓글로 알려주세요! searchController .searchBar .setScopeBarButtonTitleTextAttributes ([ .foregroundColor : UIColor.candyGreen()], for :.selected) searchController .searchBar .setScopeBarButtonTitleTextAttributes ([ .foregroundColor : UIColor.white], for :.

[UXKit] 앱 탐구 생활 - App Store

이미지
개인적으로 가장 좋아하고 또 아름답다고 생각하는 앱을 리뷰해보려고 합니다. 아이폰을 쓰면서 100%의 유저들이 사용했다고 확신할 수 있는 앱 입니다. 평소에는 아무 생각 없이 쓰다가, 막상 뜯어보고 비슷하게 구현하려고 하니 생각보다 많은 기능들이 들어있음을 깨닫고 정리하면서 남겨볼까 합니다. 이 앱은 아마 기본으로 설치되어 있는 앱이라 아이폰을 사용하신다면 어렵지 않게 살펴보실 수 있을꺼에요! 런치뷰 애플이 만든 기본 앱들은 살펴볼수록 놀랍고, 또 그들이 제안하는 HIG 라는 철학위에 만들어지는 것에 놀랍다고 생각합니다. 예를 들면 런치뷰의 경우에는 사용자가 기다리는 시간을 최소화 하기위해 첫 화면과 가장 유사하게 만들어야 한다고 합니다. 보통의 다른 앱들은 광고모델이 등장하거나, 앱의 로고, 이름들이 짠 하고 나오고 첫 화면으로 넘어갑니다. 그런데 애플의 이 앱스토어는 빠르기도 하지만 켜자마자 켜진다는 느낌을 받습니다. 기다리는 시간이 체감되지 않습니다. 아래 스크린 샷을 찍는 것도 힘들 정도였습니다. 조금 더 기다리면 인디케이터가 나오기도 하지만, 첫 화면의 배경생과 같은 런치뷰를 썻기 때 문에 그 위에 무언가 나타났다는 느낌을 받았습니다. 앱 구성 크게 5개의 탭바로 되어있습니다. 투데이 게임 앱 Arcade 검색 굉장히 직관적이지만, 실제 앱의 카테고리로 나누고 탭을 줄여도 되지 않았을까 라는 생각도 듭니다. 반대로 생각해보면, 앱을 소개하고 싶고, 큰 가지를 탭바로 나누어 놓은 것 처럼 생겼습니다. 트렌트에 맞는 투데이, 게임, 앱, 아케이드 앱 언제든지 애플의 운영정책에 따라 탭바의 아이콘과 내용이 바뀌어도 이상하지 않아 보입니다. 투데이 홈 화면에서는 예쁜 카드들이 특정 기준에 해당하는 앱을 설명해줍니다. 인기있는 앱이나 흥미로운 아티클과 함께 앱소개가 되어 항상 보면서 이런 앱들이 새로 나왔구나 라는 정보를 얻고 있습니다. 그 와중에 이상한 곳에서 감동을 받았는데 바로 카드클릭 애니메이션 이었습니다. 투에이에

[인터뷰질문 001] Swfit에서 dictionary와 array의 차이점이 무엇인가요?

이미지
데이터 접근 방식의 차이 array는 정렬된 값들의 모임이고, dictionary는 정렬되지 않은 key-value 쌍의 값들의 모임입니다. 그러므로 데이터에 접근하는 방법이 다릅니다. array - 숫자로 된 index에 데이터에 접근합니다. // print (myArray[ 3 ]) dictionary - 사용자가 정의 한 key 값을 통해 value에 접근합니다. // print (myDictionary[ "apple" ]) 데이터 정렬의 차이 array는 index의 순서대로 정렬이 되어있습니다. 그래서 반복문으로 출력을 하게 되면 일정한 순서가 있고, 순서대로 출력되게 됩니다. let fruits = [ "banana" , "apple" , "avocado" ] for item in fruits { print (item) } // banana // apple // avocado 물론 정렬을 지원하기도 합니다. let sortedFruits = fruits.sorted {$0 < $1} for item in sortedFruits { print (item) } // apple // avocado // banana dictionary는 기본적으로 정렬되어있지 않습니다. 이게 무슨뜻 인지 아래 코드로 설명하겠습니다. let fruits = [ "banana" : " $3 " , "apple" : " $8 " , "avocado" : " $12 " ] for item in fruits { print (item.key, item.value) } // avocado $12 // banana $3 // apple $8 출력된 결과를 보면, 알파벳 순도 아니고, 그 어떤 기준도 없습니다. 정의 그대로 정렬되어 있지 않

UINavigationController의 구성요소가 떠오르지 않는 사람을 위한 글

이미지
한 화면으로 이루어져 있는 앱을 만들다 보면, 다른 기능을 새로운 화면에 구성하고 싶은 생각이 듭니다. 이럴 때 필요한것이 화면 전화이죠. 화면 전환에는 여러가지 방법이 있으나, 그 중에 하나인, 가장 기본적이고 많은 기능을 제공하는 NavigationBar의 구성요소와 기능들에 대해 알아보도록 하겠습니다. 정의 및 구성요소 UINavigationBar 는 UINavigationController 라는 컨트롤러에 의해 제어됩니다. UIViewController 를 상속받아 구현되어 있기 때문에 UIViewController 가 가진 요소들을 가지고 있습니다. 가장먼저 UINavigationController 에 대해 먼저 알아보겠습니다. class UINavigationController : UIViewController UINavigationController 는 하나의 뷰 컨트롤러가 아닌 여러개의 뷰 컨트롤러의 계층을 만들고 관리 해주는 컨트롤러 입니다. 사용자가 상세화면이나 상위에 있는 화면이라고 생각하게 만들어주죠. 아래의 이미지를 보면서 생각해봅시다. 첫 화면에서 General 버튼을 누르면, General 페이지로 이동됩니다. 그려먼 화면의 타이틀이 바뀌고, 이전 페이지로 돌아갈 수 있는 버튼이 생기죠. 실제 화면이 쌓이고, 사라지는 순서를 관리하는 navigation stack 이 있습니다. 네비게이션의 첫 뷰 컨트롤러는 스택의 root인 root view controller 가 됩니다. 즉 네비게이션 컨트롤러는 root view controller 인 뷰컨트롤러가 필요하죠. 화면의 순서는 stack이 관리하지만, 사용자가 이 스택을 조종하기 위한 인터페이스로 UINavigationBar 가 있습니다. UINavigationBar 의 구성 요소는 위의 그림과 같습니다. 일반적으로 화면의 가장 상단에서 화면의 계층을 나타내 줍니다. 이전화면은 어디서 왔는지, 내가 할 수 있는 행동은 무엇인지, 이 페이지가 어디인지를 타이틀 등을

Swift에서 Enum을 활용하는 10가지 방법

이미지
개발을 하고, 리팩토링을 하다보면 Enum을 썼을 때 좋은 결과를 얻은 경험이 많습니다. 그러나 너무 남발하게되면 또 코드가 더러워져서 어떻게 응용하면 좋을지 정리해 보도록 하겠습니다. 다음 아티클 을 보고 가져온 코드도 있고, 이해했는지 검증하기 위해 새로 짠 코드들도 있습니다. enum이 무엇인지 문법을 알지만 어떻게 활용해야 할지 모르는 분들 미래의 나를 위해 작성했습니다 프로퍼티 활용방법 enum에는 stored properties 를 만들 수 없습니다 즉 변수를 선언해서 할당할 수 없다는 뜻이죠. 하지만 computed properties 는 선언해서 활용할 수 있습니다. 예제 코드를 보여드릴게요 enum Food { case korean case japanese var name: String { switch self { case . korean: return "kimchi" case . japanese: return "sushi" } } } let todaysLunch = Food.korean.name print(todaysLunch) / / kimchi 위와 같이, 음식의 종류를 정했다면, 저장 프로퍼티인 name 을 만들어서 각각의 값을 저장 해 줄 수 있습니다. 저는 enum에 String을 지정해서 return을 해주려고 했었는데 이 방법이 훨씬 깔끔한 것 같아요. 각각에 변수마다 필요한 값들을 내려주는 것이 명확하네요 메소드 활용방법 프로퍼티 말고 메소드도 enum에 정의해서 활용할 수 있습니다. 아래의 예시를 통해 설명 드리도록 하겠습니다. enum Food { case korean case japanese func description () -> String {