제네릭 특정 형식과 연관되지 않은 함수를 구현하는 방법 func name(parameters) -> Type { code } : 타입 파라미터, 함수 내부터에 타입 파라미터나 리턴형으로 활용됨 (다른 이름을 사용해도 됨) 형식에 관계없이 모든 값을 파라미터로 전달할 수 있음 // Generics func swapValue(left: inout T, right: inout T) { let tmp = left left = right right = tmp } var a = 1 var b = 10 swapValue(left: &a, right: &b) print(a, b) // 10, 1 var c = 4.5 var d = 6.8 swapValue(left: &c, right: &d) 제네릭에 제한주기 제네릭 ..
전체 글
린다's iOS 성장일기 (@yeonda.dev) Github : https://github.com/syss220211
스터디에서 유킷, 스유 퐁당퐁당 스터디를 하는데 저번에 스유로 로그인 화면을 했으니 이번에는 유킷으로 구현해보자!라고 해서 구현해본 화면입니당 아직은 정말 화면과 기능(?)만 구현했기 때문에.. 다음페이지로 넘어가는 그런거 업슴요.. (전체 코드는 맨 밑에 있어요!!) 구현 조건은 스유와 동일했어요! 이메일 텍스트 필드는 이메일 키보드가 나오도록 설정 비밀번호 텍스트 필드는 암호화 되어서 보이도록 설정 이메일, 비밀번호 텍스트 필드에 값이 있고, 토글이 활성화 되어야 버튼도 활성화 되도록 설정 이번에는 스토리보드 베이스로 구현해 놓았습니다! 레이아웃은 대충 요로케 저번 스유와 비슷한 모양으로 잡았어요. 저번 스유때랑은 다르게 추가한 로직이 있었는데.. 일단 아이디와 비밀번호가 10글자 미만이면 잘못된 입..

iOS 스터디가 있는데 매주 공부한 내용을 한번에 사용할 수 있는 화면을 구현해보고 있거든용 이번주 월요일은 로그인 화면을 구현하는 것을 목표로 잡고 스터디를 하기로 했어요. 왜냐? SwiftUI의, @State, @Binding, TextField에 대해서 공부했기 때문이죠. 구현조건 이메일 텍스트 필드는 이메일 키보드가 나오도록 설정 비밀번호 텍스트 필드는 암호화 되어서 보이도록 설정 이메일, 비밀번호 텍스트 필드에 값이 있고, 토글이 활성화 되어야 버튼도 활성화 되도록 설정 요 3가지가 일단 공통적으로 구현하자고 약속한 조건이었슴다. 그래서 먼저 아이디, 비밀번호 텍스트 필드부터 구현을 하고자 했으나.. UIKit과는 다르게 테두리가 없어서(?) style를 따로 설정해줘야 하더라구요. 근데 저는..

SearchBarController랑 CollectionView를 함께 사용해보려고 했다. 테이블뷰를 코드 베이스로 구현해보았기 때문에 똑같을 줄 알고 그대로 구현했는데 "UICollectinView must be initalized with a non-nil layout parameter"이라는 에러가 발생했다... 읭 .. ? 싶어서 찾아보니 CollectionView는 레이아웃 파라미터 없이 초기화를 할 수 없다는 의미였음.. tableView랑은 다르게 collectionView는 생성할 때 레이아웃을 파라미터로 넣어서 생성해야 한다. 코드로 보여주면 tableView처럼 UITalbeView()로 생성할 수 없다는 말 왜인지 찾아보니 공식 문서에도 이렇게 나와있었다 .. 어쨌든 파라미터로 레이아..

이미 알고 이 페이지를 보는 것이겠지만.. 우리가 지금까지 변수! 상수!라고 생각하면서 사용했던 것들이 실은 프로퍼티랍니다. (프로퍼티랑 속성이랑 같은 말임) 속성에는 저장속성, 계산속성, 지연저장속성… 이 있음 슉슉 정리해봅시다!! 저장속성 (클래스, 구조체에서 선언 가능) 클래스나 구조체에서 인스턴스가 가지는 공간으로 쉽게 우리가 지금까지 변수/상수로 선언했던 인스턴스에요. 인스턴스 초기화시 각 저장속성은 값을 가져야 하는건 다들 아시져? 지금 여서 resultCount랑 results 가 저장속성이라는 말을 하고 있는겁니다. 지연저장속성 초기화를 지연하는 것인데... 이게 무슨 말이야 싶으시죠 대충 일반 인스턴스가 최기화 된후에 나중에 개별적으로 초기화 된다고 생각하면 될듯..해요 저는 이렇게 이해..
Closure Closure는 Unnamed function, 이름이 없는 함수에요. 함수와 마찬가지로 1급 시민이지만, 함수와 다르게 argument label 사용 하지 않아요. Syntax! { (parameters) -> Return Type in statements } // 함수와 동일하게 파라미터와 리턴 타입 생략 가능 { statements } // 위와 동일한 closure 클로저는 global scope에서 단독으로 사용 불가, 상수나 변수에 저장하여 사용해야해요. 아무래도 이름이 없는 함수니까 냅다 클로저만은 사용할 수 없겠죵 ? 이렇게 저장해서 사용해야합니다. (당연히 매개변수로 넣을 수 있음) let c = { (str : String) -> String in return "Hell..