분류 전체보기
[Swift] 연산자 메서드와 사용자 정의 연산자
연산자 메서드 struct Vector2D{ var x = 0.0 var y = 0.0 } let vector1 = Vector2D(x: 3.0, y: 1.0) let vector2 = Vector2D(x: 1.0, y: 0.5) extension Vector2D{ // static(타입)메서드인 이유는 서로 다른 인스턴스를 더하기 때문에 타입 메서드이다. // 중위연산자⭐️(infix)는 생략이 가능하다 static func + (lhs: Vector2D, rhs: Vector2D) -> Vector2D{ return Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y) } // let plusVector = vector1 + vector2 static func - (lhs..
[Swift] 비트연산자
비트연산 메모리 비트단위로 직접적인 논리연산을 수행하고, 비트 단위 이동시에 사용하는 연산 비트연산은 연산속도가 빠르다. 직접적으로 메모리의 실제 비트를 컨트롤하기 때문이다. 짧은 코드로 복잡한 로직을 구현할 수 있다. 비트 논리 연산자 [ ~ ] Bitwise Not Operator ~a 부정 연산자, 기존의 메모리 비트를 반전시킨다. let a: UInt8 = 0b0000_1111 // 15 let b1 = ~a // 0b1111_0000 // 240 [ & ] Bitwise And Operator a & b 비트 논리 곱 연산자. let a: UInt8 = 0b0111_1000 // 120 let b: UInt8 = 0b1011_0111 // 183 let c = a & b//0b0011_0000 ..
[Swift] 단락평가와 사이드이펙트
단락평가 논리평가식에서 결과 도출에 필요한 최소한의 논리식만 평가한다. true || true // 왼쪽부터 평가하는데, ||(or)로 연결되어있기 때문에 뒤의 표현식이 true or false 에 상관없이 항상 true가 되기 때문에 뒤의 표현식은 검사하지 않는다. false && true // 이도 마찬가지로 &&(and)로 연결되어있기 때문에 뒤의 표현식인 true는 평가하지 않는다. 사이드이펙트 사이드 이펙트의 사전적인 의미는 '원래 의 목적과 다른 효과 또는 부작용'이라는 상태를 말한다. 마치 고혈압 약을 먹었는데 머리가 풍성해지는것과 같은..? 꼭 부정적인일만은 아니다. 하지만 좋은 결과를 나타낸다고해서 좋은 사이드 이펙트는 없다. var some = 0 func checking() -> Bo..
객체간의 인터페이스를 추상화한다?(Swift)
무슨소린지 못알아듣겠어서 공부하고 정리. 인터페이스 Swift에서 인터페이스는 Protocol이다. JAVA에는 인터페이스가 존재하는데, Swift의 Protocol과 비슷한 기능을 한다. 자바의 인터페이스와 프로토콜은 비슷하지만 차이가 있다. 기본값을 설정한다 ? 자바의 인터페이스는 기본값을 설정할 수 있다고 한다. Swift의 Protocol은 기본값을 설정할 수 없다. 요구사항의 구현정도? 자바의 인터페이스는 요구한 구현을 모두 정의해야한다. Swift의 Protocol은 optional로 선택 구현이 가능하다. 객체간의 인터페이스 추상화 객체간의 인터페이스를 추상화한다는 것은, 객체간의 상호작용에서 필요한 기능들을 분리하고 명확하게 정의한다는 것이다. 예를 들어, 학생 정보를 저장하고 관리하는 프..
[Swift] - 프로토콜의 연관타입(associatedtype)과 제네릭
제네릭은 특히 프로토콜에서 빛을낸다. 프로토콜에 제네릭이 적용되면 다형성을 구현하는데 큰 도움이 된다. 특정 프로토콜이 서로 다른 타입에 더욱 자유롭게 채택할 수 있도록 하여 통일성을 높이고, 재활용성도 함께 높아진다. 하지만 프로토콜 자체가 제네릭 파라미터를 가질 순 없다. 프로토콜은 메서드나 속성을 구체화할 의무가 없고 최소 요구사항만을 갖기 때문이다. 프로토콜에서 타입이 제네릭하게 메서드나 속성을 구현할 수 있도록 연관타입(associatedtype)을 활용한다. 연관타입을 요구사항으로 갖는 프로토콜을 채택하면 해당 연관타입을 각 타입에서 구체화할 수 있고 그 전까지는 명시되지 않는다. 연관타입과 제네릭을 함께 사용 protocol Container{ associatedtype Item // 연관 ..
[Swift] 제네릭(Generic)
제네릭 제네릭을 이용해 코드를 구현하면 어떤 타입에도 유연하게 대응할 수 있다. 제네릭으로 구현한 기능과 타입은 재사용하기 쉽고, 코드의 중복을 줄일 수 있다. 타입 파라미터는 함수 내부에서 타입의 이나 리턴형으로 사용된다. 관습적으로 T를 사용하지만 사용하지만 다른문자를 사용해도 되면 Upper camel case를 사용한다. 처럼 2개이상을 선언해도 된다. 제네릭이 필요한 이유 var numA = 10 var numB = 20 print(numA, numB) // 10 20 // 두 숫자를 서로 교환하는 함수 func swapInt(_ a: inout Int, _ b: inout Int){ let tmp = a a = b b = tmp } swapInt(&numA, &numB) print(numA, ..
[iOS] YPImagePicker
YPImagePicker YPImagePicker는 기기의 사진 라이브러리 또는 카메라에서 이미지를 선택하는 쉽고 사용자 정의 가능한 방법을 제공하는 인기 있는 iOS용 이미지 선택 라이브러리다. 설치 YPImagePicker는 CocoaPods를 사용하여 설치할 수 있다. 설치하려면 Podfile 추가한다. pod 'YPImagePicker' 위의 줄을 추가한 후 터미널에서 pod install을 실행하여 라이브러리를 설치한다. 사용법 사용하려는 파일의 맨 위에 있는 라이브러리를 import한다. import YPImagePicker 이미지 선택기를 표시하려는 메서드에서 YPImagePicker 인스턴스를 만든다. let picker = YPImagePicker() 필요에 따라 YPImagePicker..
[iOS] SDWebImage 라이브러리
https://github.com/SDWebImage/SDWebImage GitHub - SDWebImage/SDWebImage: Asynchronous image downloader with cache support as a UIImageView category Asynchronous image downloader with cache support as a UIImageView category - GitHub - SDWebImage/SDWebImage: Asynchronous image downloader with cache support as a UIImageView category github.com SDWebImage 이 라이브러리는 url을 받아서 비동기적으로 이미지를 받아오고, 받아온 이미지를..
[iOS] UIImagePicker
UIImagePicker // 버튼이 눌리면 이미지 피커가 떠오르도록 @objc func handleProfilePhotoSelect(){ //이미지 피커 설정 let picker = UIImagePickerController() picker.delegate = self picker.allowsEditing = true present(picker, animated: true, completion: nil) } ImagePickerDelegate extension RegistrationController: UIImagePickerControllerDelegate{ // 이미지피커 선택이 완료되면 전달되는 델리게이트 func imagePickerController(_ picker: UIImagePickerC..
[iOS] some키워드?
some 키워드? SwiftUI를 공부하며 많이 본 키워드이지만 난 아직 SwiftUI를 깊게 공부하지 않는다 하지만 일단 한번 본다면 some키워드는 Swift5.1의 새로운 기능이다. some 키워드는 연산프로퍼티인 body안에 불투명한 타입이 있음을 나타낸다?? some 키워드는 프로토콜을 준수하는 불투명한 유형을 리턴하기위해 프로토콜과 함께 사용될 수 있다. protocol Shape { func describe() -> String } struct Square: Shape { func describe() -> String { return "I'm a square. My four sides have the same lengths." } } struct Circle: Shape { func desc..