전체 글 178

[iOS] Xib 파일을 이용한 TableViewCell

TableView에 들어갈 TableViewCell을 만들던 중, Xib 파일을 생성하여 Cell Custom을 해보기로 했다. (뭐 그냥 Xib파일은 어떻게 설정하는건지 공부할겸? 하나의 셀을 세부적으로 확인할 수 있어서 좋았던 듯 하다.) "TableView에 TableViewCell을 어떻게 넣고 화면에 보여주는지"는 따로 정리할 예정이다. 이번 포스팅은 그냥 Xib파일의 등록? 처음에는 그냥 ViewController에서 TableView를 만들고, 아래 캡처 화면을 따라하자. 아래의 설명과 코드들은 ViewController에 속한다 ! 1. "packingTV" 라는 이름의 TableView를 만들기 ( + 코드 설정까지 ) @IBOutlet weak var packingTV: UITableV..

iOS 2022.03.23

[Swift] 맵, 필터, 리듀스

1️⃣ 맵 자신을 호출할 때 매개변수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수 기존 데이터를 변형하는데 많이 사용 map 매서드를 클로저 표현을 이용하여 간략화하기 let numbers: [Int] = [0, 1, 2, 3, 4] // 기본 클로저의 표현식 사용 var doubleNumbers = numbers.map({(number: Int) -> Int in return number * 2}) // 매개변수 및 반환 타입 생략 doubleNumbers = numbers.map({return $0 * 2}) print(doubleNumbers) // 반환 키워드 생략 doubleNumbers = numbers.map({ $0 * 2}) print(doubleNumbers) // 후행 클..

Swift 2022.03.22

[Swift] 옵셔널 체이닝과 빠른 종료 (guard, assert)

1️⃣ 옵셔널 체이닝? - 옵셔널에 속해있는 nil일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정이다. - 옵셔널에 값이 있다면 프로퍼티, 메서드, 서브스크립트 등을 호출 - 옵셔널이 nil이라면 프로퍼티, 메서드, 서브스크립트 등은 nil을 반환 - 옵셔널을 반복사용하여 옵셔널이 자전거 체인처럼 서로 꼬리를 물고 있는 모양이기 때문에 옵셔널 체이닝이라고 부른다! 💡물음표(?) - 프로퍼티나 메서드 또는 서브스크립트를 호출하고 싶은 옵셔널 변수나 상수 뒤에 붙임 💡느낌표(!) - 옵셔널에서 값을 강제 추출하는 효과 - 옵셔널에 값이 없다면 런타임 오류가 발생 옵셔널 체이닝 간략하게 알아보기 // 사람의 주소 정보 표현 설계 class Room { va..

Swift 2022.03.20

[Swift] 클로저 : Closure

함수형 프로그래밍 패러다임과 클로저의 관계 - 스위프트에서 함수형 프로그래밍 패러다임을 접할 때 첫걸음으로 꼭 알아야할 클로저! - 클로저와 제네릭, 프로토콜, 모나드 등의 결합으로 스위프트는 훨씬 강력한 언어가 되었다. 함수와 클로저? - 함수는 클로저의 한 형태! 클로저? 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있다. 이를 변수나 상수의 클로징(잠금)이라고 하며, 여기서 착안된 이름 '클로저' 클로저의 형태 1. 이름이 있으면서 어떤 값도 획득하지 않는 전역함수의 형태 2. 이름이 있으면서 다른 함수 내부의 값을 획득할 수 있는 중첩된 함수의 형태 3. 이름이 없고 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성한 형태 1️⃣ 클로저의 표현방법 (위치를 기준으로) 1. 기..

Swift 2022.03.20

[Swift] 접근제어 : 읽기 전용 구현

💡접근제어의 필요성 객체지향 프로그래밍 패러다임에서 중요한 캡슐화와 은닉화를 구현하는 이유는 위부에서 보거나 접근하면 안 되는 코드가 있기 때문이다. 접근제어를 통해 꼭 필요한 부분만 제공할 수 있다. 💡읽기 전용 구현 설정자만 더 낮은 수준을 갖도록 제한할 수 있다. 요소의 접근수준 키워드 뒤에 접근수준(set)처럼 표현하면 설정자의 접근수준만 더 낮도록 지정해줄 수 있다. 설정자의 접근수준 제한은 프로퍼티, 서브스크립트, 변수 등에 적용될 수 있으며, 해당 요소의 접근수준보다 같거나 낮은 수준으로 제한해주어야한다. public struct SomeType{ // 비공개 접근 수준 저장 프로퍼티 count private var count: Int = 0 // 공개 접근 수준 저장 프로퍼티 publicS..

Swift 2022.03.19

[Swift] 함수를 사용한 프로퍼티 기본값 설정

함수를 사용한 프로퍼티 기본 값 설정 만약 사용자 정의 연산을 통해 저장 프로퍼티 기본값을 설정하고자 한다면 클로저나 함수를 사용하여 프로퍼티 기본 값을 제공할 수 있다. 인스턴스를 초기화할 때 함수나 클로저가 호출되면서 연산 결괏값을 프로퍼티 기본값으로 제공해준다. ( -> 타입이 일치해야함 ) 클로저가 실행되는 시점 - 초기화할 때, 인스턴스의 다른 프로퍼티 값이 설정되기 전! 즉, 클로저 내부에서는 인스턴스의 다른 프로퍼티를 사용하여 연산할 수 없다는 것이다. (self 프로퍼티, 인스턴스 메서드 등) 클로저를 통한 student 프로퍼티 기본 값 설정 struct Student{ var name: String? var number: Int? } class SchoolClass{ var studen..

Swift 2022.03.19

[Swift] self 프로퍼티 (feat. mutating, 타입메서드)

💡self 프로퍼티? 인스턴스를 더 명확하게 지칭하고 싶을 때 사용 스위프트는 자동으로 메서드 내부에 선언된 지역변수 -> 메서드 매개변수 -> 인스턴스 프로퍼티를 찾아 지정하는 것을 유추한다. 이때, self 프로퍼티를 사용하여 메서드에서 매개변수가 아닌 인스턴스 프로퍼티를 지칭할 수 있다. ➰self 프로퍼티의 다른 용도 값 타입 인스턴스 자체의 값을 치환할 수 있다. 클래스의 인스턴스는 참조 타입이라서 self 프로퍼티에 다른 참조를 할당할 수 없는데, 구조체나 열거형 등은 self 프로퍼티를 사용하여 자신 자체를 치환할 수 있다. ➰self 프로퍼티와 mutating 키워드 mutating 키워드 ? - 자신의 프로퍼티 값을 수정할 때 클래스의 인스턴스 메서드는 크게 신경쓸 필요가 없지만, 구조체..

Swift 2022.03.19

[Swift] 연산 프로퍼티로 가독성 높이기!

💡연산 프로퍼티? 실제값을 저장하는 프로퍼티가 아니라, 특정 상태에 따른 값을 연산하는 프로퍼티 메서드로 접근자와 설정자를 구현하던것을 연산 프로퍼티를 사용하면 코드의 가독성을 높일 수 있다! 다만, get 메서드만 구현해둔 것처럼 읽기 전용 상태로는 구현하기 쉽지만, 쓰기 전용 상태로는 구현할 수 없다는 단점이 있다. 연산 프로퍼티 정의와 사용 struct CoordinatePoint{ var x: Int // 저장 프로퍼티 var y: Int // 저장 프로퍼티 var oppositePoint: CoordinatePoint{ // 연산 프로퍼티 // 접근자 get { return CoordinatePoint(x: -x, y: -y) } // 설정자 set(opposite){ x = -opposite...

Swift 2022.03.19

[Swift] 구조체와 클래스

구조체의 인스턴스는 값 타입 (전달될 값이 복사되어 전달) 클래스의 인스턴스는 참조 타입 (값을 복사하지 않고 참조(주소)가 전달) 1️⃣ 구조체 // 구조체 정의 struct BasicInformation { var name: String var age: Int } // 구조체 인스턴스의 생성 및 초기화 // 프로퍼티 이름(name, age)으로 자동 생성된 이니셜라이즈를 사용하여 구조체를 생성 var yejinInfo: BasicInformation = BasicInformation(name: "yejin", age: 23) yejinInfo.name = "hyejin" // 변경 가능 yejinInfo.age = 25 // 변경 가능 // 프로퍼티가 상수 let 의 타입일 경우 변경 불가 ➰스위프트..

Swift 2022.03.17

[Swift] 옵셔널 : 옵셔널 추출

💡 옵셔널 단어 뜻 그래도 '선택적인', 즉 값이 '있을 수도, 없을 수도 있음'을 나타내는 표현 '변수나 상수 등에 꼭 값이 있다는 것을 보장할 수 없다.' 즉, 변수 또는 상수의 값이 nil일 수도 있다는 것을 의미 옵셔널 변수의 선언 및 nil 할당 var myName: String? = "yejin" print(myName) // yejin //옵셔널 타입의 값을 print 함수를 통해 출력하면 //Optional("yejin")이라고 출력되는 것이 정상 //다만, 차후의 주석표현의 편의를 위해서 //Optional()은 생략하고 값만 표기하도록 하겠다. //또, 옵셔널 타입의 값을 print 함수의 매개변수로 전달하면 //컴파일러 경고가 발생할 수 있다. //정상이므로 놀라지 않아도 된다. my..

Swift 2022.03.17