본문 바로가기

공부73

[스위프트] 배경색 바꾸기 및 애니메이션 적용 앞선글에서 이어진다 2024.01.05 - [공부/스위프트] - [스위프트] 이미지 평균 색 추출 위의 예시를 통해 이미지에서 평균 색을 추출하고 이를 배경색으로 바꿔주면 매우 있어보이는 앱을 만들 수 있다. 아래는 작성 코드다. self.view.backgroundColor = self.imageViewer.image?.avgImageColor self가 필요하지 않은 부분에서는 빼고 작성해도 된다. 그리고 추가적으로 애니메이션까지 주면 부드럽게 작성된다. UIView.animate(withDuration: 0.2) { self.view.backgroundColor = self.imageViewer.image?.avgImageColor } UIView.animate(withDuration:)에 Doub.. 2024. 1. 5.
[스위프트] 이미지 평균 색 추출 스위프트에서 이미지뷰를 쓸때 이미지의 평균색을 추출하는 방법은 다음과 같다. extension UIImage{ var avgImageColor: UIColor? { guard let inputImage = CIImage(image: self) else { return nil } let extentVector = CIVector(x: inputImage.extent.origin.x, y: inputImage.extent.origin.y, z: inputImage.extent.size.width, w: inputImage.extent.size.height) guard let filter = CIFilter(name: "CIAreaAverage", parameters: [kCIInputImageKey: inp.. 2024. 1. 5.
[스위프트] UIKit에서 UISegmented Control을 써보자 UIKit에서 세그먼트라는 게 있는데 오늘은 이 친구의 사용법을 알아볼 것이다. 세그먼트 Segmented Control이라고 치면 나오는 컴포넌트로 아래와 같이 생겼다. 선택지가 몇개 없을때 누르는 항목마다 바로바로 화면의 요소가 바뀌는 장면에 사용된다. Tab Bar보다는 적지만 그래도 많은 요소들(혹은 넓은 영역)이 한번에 바껴야 된다면 좋은 선택지이다. UISegmented Control 클래스에 속해있으며 sender 파라미터로 UISegmentedControl타입을 받는다. sender를 이용해 값의 변경을 유도할 수 있다. sender.selectedSegmentIndex 이걸로 현재 선택된 세그먼트를 감지한다.(0부터 시작한다.) 당연히 눌렀을때 IBAction도 지정할 수 있다.(눌렀을때.. 2024. 1. 4.
[스위프트] final 메서드와 static 메서드 이전에 타입 메서드와 인스턴스 메서드의 비교를 해봤다. 2024.01.03 - [공부/스위프트] - [스위프트] 인스턴스 메서드와 타입 메서드 근데 타입 메서드에 대해서 생각하다 보면 이런 생각이 든다. "final class func와 static func와 똑같이 작동하지 않나?" 실제로 그렇다. 똑같이 작동한다. 적어도 내가 해봤던 테스트상으로는 그랬다. 하지만 실제로는 다른경우에 쓴다. 근데 막 찾아봐도 정확히 어떨 때 쓴다는 말이 명확한 느낌으로 없다. 내가 내린 결론은 단어에서 주는 뉘앙스 차이로 인해서 그렇다고 본다. final 먼저 final 메서드는 타입 메서드로 쓸 때 "final 메서드명" 이런식으로 쓴다. 이는 앞에서 static 타입 메서드 얘기할 때 말했듯이 오버라이딩이 안 된다.. 2024. 1. 4.
[스위프트] 인스턴스 메서드와 타입 메서드 스위프트의 메서드에는 인스턴스 메서드와 타입 메서드 두 가지 종류가 있다. 이번에는 인스턴스 메서드와 타입 메서드, 이 두가지의 차이점에 대해 알아보자. 인스턴스 메서드 인스턴스 메서드란 우리가 흔히 쓰는 메서드이다. 왜 인스턴스 메서드냐면 인스턴스화 했을때 쓸 수 있는 메서드라 인스턴스 메서드다. 타입 메서드 타입 메서드란 흔히 static을 접두어로 붙이고 선언한 메서드를 말한다. (마찬가지로 static을 붙인 프로퍼티는 타입 프로퍼티가 된다.) 이는 클래스나 구조체가 타입으로 선언되니까 호출 시에 "클래스(구조체) 명. 메서드명" 이렇게 호출할 수 있어서 타입메서드이다.(프로퍼티도 똑같다.) 하지만 중요한 건 타입메서드에는 두 가지가 있다. static 메서드 class 메서드 static 메서드.. 2024. 1. 3.
[CS] 인스턴스화란 무엇일까?(클래스, 객체, 인스턴스) 이번시간에는 "인스턴스화"에 대해서 알아보려고 한다. 아마 다들 여기저기서 수업을 듣거나 강좌를 볼때 인스턴스화한다 라는 말은 들어봤을 것이다. 근데 정확한 뜻은 모르고 그냥 느낌상 어떻다 라고만 알수있는데 이번에 확실히 알아보자. 인스턴스화란 객체지향에서 나오는 단어인데 주로 붕어빵틀과 붕어빵으로 얘기가 돌아다니는것을 확인할 수 있다. 하지만 이는 좀 부정확한 비유라는게 최근에 나오고 있다. 나도 동의한다. 그래서 나는 이왕 붕어빵틀로 얘기를 했으니까 붕어빵틀에서 크게 벗어나지 않으려 한다. 그래서 붕어빵틀의 설계도와 붕어빵틀로 얘기를 하려고 한다. 클래스(Class)와 구조체(Struct) 우리가 클래스나 구조체(스위프트에서는 주로 구조체(Struct)를 기본적인 구조와 내부 작동방식(메소드)등으로 .. 2024. 1. 2.
[스위프트] 복잡한 함수의 사용 스위프트에서 함수를 선언하고 쓰는 데에 정말 복잡한 경우가 있다. 바로 함수를 일급객체로 쓰는 경우다. 함수를 일급객체로 쓰면 변수 및 상수에 저장해 쓸 수 있다. // 이 함수의 타입은 (String, String) -> String 이다 func areYouKorean(name: String, food: String) -> String { return "\(name), 당신은 \(food)를 좋아하는 한국인입니다." } // 이 함수의 타입도 (String, String) -> String 이다 func areYouAmerican(name: String, food: String) -> String { return "\(name), 당신은 \(food)를 좋아하는 미국인입니다." } 일단 name과 r.. 2023. 12. 19.
[스위프트] nil과 null 차이 스위프트에는 nil이 있습니다. 하지만 다른 언어에, 심지어 이전의 Objective-C에도 null이 있었습니다.(물론 obj-c에는 nil도 있었습니다.) 그렇다면 nil은 무엇이며 nil과 null의 차이는 무엇일까... 일단 기존의 obj-c에서 nil과 null들에 대해서 간단하게 살펴봅시다. NULL C pointer의 null nil Objective-C의 object들을 나타내는 null값 Nil Objective-C의 class들을 나타내는 null값 NSNull null을 표현하기 위한 싱글톤 오브젝트 뭐 그렇다고 합니다. 하지만 Swift에서는 위의 것들을 전부 없애버리고 nil만 남았다. Swift에서 nil은 값이 존재할지 안 할지 모르는 상태의, 아예 빈값("")도 없을 수 있는.. 2023. 12. 15.
[스위프트] 옵셔널 바인딩 단축하기 원래 옵셔널 바인딩은 아래처럼 if let(var)문이나 guard let(var)문을 사용하여 할당하고 사용해야한다. var name: String? var age: Int? let isLoadingDone: Bool = false if isLoadingDone { name = "홍길동" age = 65 } if let name, let age { print("\(age)세 \(name)님 반갑습니다") } else { print("자료를 확인할 수 없습니다") } 하지만 아래처럼 사용할 수도 있다. // 다음과 같이 옵셔널 바인딩을 단축할 수 있다. let tempName: String = name ?? "알 수 없는 이름"// 기본값을 할당한다. let tempAge: Int = age ?? 0//.. 2023. 12. 14.
728x90