전체 글
- [Swift] 스크롤뷰 내 테이블뷰, 콜렉션뷰 높이 동적 설정 2023.01.08
- [Swift] present한 뷰컨을 dismiss하면서 presentingViewController의 메소드 호출하기 2022.12.08
- [Swift] UISearchController.searchBar 이벤트 안탈 때 2022.11.30
- [Swift] 기본문법 정리3 - 열거형/옵셔널 체이닝/클로저/클로저 간소화/고차함수 2022.11.25
- [Swift] 기본문법 정리2 - 구조체&클래스/초기화 구문/프로퍼티/타입캐스팅/assert&guard/프로토콜 2022.11.24
[Swift] 스크롤뷰 내 테이블뷰, 콜렉션뷰 높이 동적 설정
2023. 1. 8. 23:31
[Swift] present한 뷰컨을 dismiss하면서 presentingViewController의 메소드 호출하기
2022. 12. 8. 17:11
[Swift] UISearchController.searchBar 이벤트 안탈 때
2022. 11. 30. 03:25
bookSearchController = UISearchController(searchResultsController: nil)
//searchController가 실행됐을 때 아래 배경을 어둡게 표시하는 여부
bookSearchController.obscuresBackgroundDuringPresentation = false
bookSearchController.searchBar.placeholder = "제목 또는 작가명 검색"
bookSearchController.searchBar.delegate = self
bookSearchController.searchResultsUpdater = self
bookSearchController.delegate = self
...
tableView.tableHeaderView = bookSearchController.searchBar
대충 서치바 코드 ..
navigationBar를 숨기고 Active될때마다 움직이지 않고 고정해서 쓰려고 tableHeaderView에 추가함
//이전뷰의 네비게이션바를 가리지 않고 보이게할라믄 true
definesPresentationContext = true
definesPresentationContext 값을 true로 하면 써치바를 탭했을 때 화면이 다 날라가버림(???????????)
기본값(false)로 두면
Application tried to present modal view controller on itself. Presenting controller is <UISearchController: 0x15f081c00>.'
오류가 남..
class SearchViewController: UIViewController {
테이블뷰 쓰려고 UITableViewController 상속받고있었는데 UIViewController를 상속받도록 수정해니깐 오류 안남.
이번에는 CancelButton 빼고 딜리게이트가 안먹음
//취소버튼 클릭
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
}
얘만 되고 온갖 searchBarText..어쩌고 이벤트가 안되는것임..
//테이블뷰 헤더에 써치바 추가
tableView.tableHeaderView = bookSearchController.searchBar
//네비게이션아이템에도 추가해야함
navigationItem.searchController = bookSearchController
테이블 헤더로 추가할래도 네비게이션아이템에 추가해주야하나벼~~~🖕
'iOS > 문제야문제' 카테고리의 다른 글
[Swift] zPosition = 1 설정 후 화면에 보이는 버튼의 탭 이벤트가 안탈 때 (0) | 2022.11.23 |
---|---|
[Swift] UICollectionView에 설정한 Shadow 안보일 때 (0) | 2022.11.23 |
[Xcode] XCODE 빌드실패 PROVISIONING 설정이 꼬였을 때 해결법 (0) | 2022.07.07 |
[Xcode] 요상한 #imageLiteral() (0) | 2022.06.21 |
[Swift] UIButton.title(for: State UIControl.State) 반응 없을 때 (0) | 2022.05.27 |
[Swift] 기본문법 정리3 - 열거형/옵셔널 체이닝/클로저/클로저 간소화/고차함수
2022. 11. 25. 16:24
열거형
// 원시값을 사용하는 열거형
enum 열거형: Type {
case a = value
}
열거형타입변수.a.rawValue
// 연관값을 사용하는 열거형
enum 열거형 {
case a(연관값Type)
}
var 열거형타입변수 = 열거형.a(연관값) // 연관값 초기화
열거형타입변수.a(let b) // b에 연관값을 대입하게 됨
옵셔널 체이닝
옵셔널 체이닝 - 옵셔널바인딩 없이 값에 접근
옵셔널타입변수?.프로퍼티 // 옵셔널타입 / Optional(value)
옵셔널타입변수!.프로퍼티 // 강제로 값만 추출
클로저
closure
- 참조타입
- 코드에서 사용할 수 있는 독립기능 블록
- 일급객채? 전달인자로 보냄, 변수/상수로 저장,전달 가능, 함수의 반환값 가능
- 익명의 함수
- 전달인자가 없음. 파라미터 값만 넘겨야함
{ (매개변수) -> 리턴타입 in // 헤드
실행구문 // 바디
}
// 파라미터X, 리턴타입X
let hello = { () -> () in
print("hello")
}
hello()
// 파라미터O, 리턴타입O
let hello2 = { (name: String) -> (String) in
return name
}
hello2("hello2")
// 함수의 파라미터로 클로저를 사용
func doSomething(closure: () -> ()) {
closure()
}
doSomething { () -> () in
print("hello3")
}
// 함수의 반환타입으로 클로저를 사용
func doSomething2() -> () -> () {
return { () -> () in
print("hello4")
}
}
doSomething2() // 클로저 네임..
doSomething2()() // 클로저() ...... print됨
클로저 간소화
// 후행클로저 - 마지막 매개변수로 전달되는 클로저만 사용가능
// 파라미터, 반환값이 없으면 in까지 생략가능
doSomething() {
print("hello3")
}
// 다중후행클로저 - 첫번째 클로저는 매개변수 생략가능
func doSomething3(closure1: () -> (), closure2: () -> ()){
closure1()
closure2()
}
doSomething3 {
print("closure1")
} closure2: {
print("closure2")
}
// 클로저 표현 간소화
func doSomething4(closure: (Int, Int, Int) -> Int){
closure(1, 2, 3)
}
doSomething4 {
$0+$1+$2
}
고차함수 - map & filter & reduce
// map - 배열의 요소에 접근 (기존배열.count = 새로운배열.count)
let numbers = [0,1,2,3]
let mapArray = numbers.map {
return $0 * 2
}
print("map - \(mapArray)")
// filter
let numbers2 = [10,50,33,354,544,20]
let filterArray = numbers2.filter {
$0 % 5 == 0
}
print("filter - \(filterArray)")
// reduce - 요소를 하나로 통합
let numbers3 = [0, 1, 2, 3]
let reduceResult = numbers3.reduce(4) { // 초기값
print ("Result - \($0), Element - \($1)") // result - 누적값, element - 요소
return $0 + $1
}
print("reduce - \(reduceResult)")
'iOS > 정리' 카테고리의 다른 글
[Swift] 로컬 서버 호출 설정 (0) | 2023.04.24 |
---|---|
[Swift] 옵저버 패턴 예제 (0) | 2023.04.12 |
[Swift] 기본문법 정리2 - 구조체&클래스/초기화 구문/프로퍼티/타입캐스팅/assert&guard/프로토콜 (0) | 2022.11.24 |
[Swift] 기본문법 정리1 - 상수&변수/컬렉션 타입/함수/옵셔널/옵셔널바인딩 (0) | 2022.11.24 |
[Swift] Kakao 지도 iOS API 사용 - Bridging header 설정 & 빌드에러 (0) | 2022.09.28 |
[Swift] 기본문법 정리2 - 구조체&클래스/초기화 구문/프로퍼티/타입캐스팅/assert&guard/프로토콜
2022. 11. 24. 19:54
구조체 & 클래스
인스턴스
- 구조체, 클래스, 열거형을 사용할 때 선언하는 오브젝트
struct
- value 타입
- 인스턴스를 상수(let)로 선언 > 내부 변수 프로퍼티 변경X
- 인스턴스를 여러개의 변수에 할당 > 변경된 인스턴스의 변수만 변경 됨 (값 복사)
class
- 참조 타입
- 인스턴스를 상수(let)로 선언 > 내부 변수 프로퍼티 변경O
- 인스턴스를 여러개의 변수에 할당 > 변경된 인스턴스의 변수 외 모든 변수값이 바뀜 (메모리 복사)
- ARC로 메모리 관리 / deinit 사용 / 상속 가능
초기화 구문
생성자 - init() {}
소멸자 - deinit {} // 옵셔널 클래스 인스턴스 값이 nil이 되면 호출 됨
프로퍼티
프로퍼티 - 저장/연산/타입 (클래스, 구조체, 프로토콜에서 사용)
// 연산 프로퍼티
get { return value }
set(newValue) { 프로퍼티 = newValue }
// 타입 프로퍼티 - static 키워드 사용 / 인스턴스 생성 없이 바로 프로퍼티에 접근 가능
// 프로퍼티 옵저버 - 저장 프로퍼티, 오버라이딩 된 연산 프로퍼티에서 사용
willSet { //newValue - 대입값 } // 프로퍼티 저장 직 전 호출 됨
didSet { //oldValue - 기존값 } // 프로퍼티 저장 직 후 호출 됨
- 저장 프로퍼티는 멍미
타입캐스팅
// 타입 확인 - 타입이 일치하면 if문 실행
if 변수 is 클래스타입 { }
// 타입 변환(다운캐스팅) - 타입이 일치하면 a 상수에 변수값을 대입하고 if문 실행
if let a = 변수 as? 클래스타입 { } // as!는 타입 변환이 실패하면 런타임에러
assert & guard
assert(조건, "") // 조건 성립X -> 메시지 출력 (디버깅용)
guard 조건 else { return } // 조건 성립X -> else 구문 실행
프로토콜
protocol
- 인터페이스?? 역할
- 정의할 때 계산/저장 프로퍼티 구분X
- 프로퍼티 var로 선언 / get,set 정의
- class에서만 오버라이드하는 생성자 앞에 required 식별자 선언
- 계산.저장 프로퍼티 구분 먼소린지
'iOS > 정리' 카테고리의 다른 글
[Swift] 옵저버 패턴 예제 (0) | 2023.04.12 |
---|---|
[Swift] 기본문법 정리3 - 열거형/옵셔널 체이닝/클로저/클로저 간소화/고차함수 (0) | 2022.11.25 |
[Swift] 기본문법 정리1 - 상수&변수/컬렉션 타입/함수/옵셔널/옵셔널바인딩 (0) | 2022.11.24 |
[Swift] Kakao 지도 iOS API 사용 - Bridging header 설정 & 빌드에러 (0) | 2022.09.28 |
[Swift] UIViewController 생명주기 (0) | 2022.09.27 |