1x, 2x 그리고 3x 를 통한 이미지 조정 이미지를 사용하게 되면 나오는 point 와 pixel 에 대한 단어가 나오는데, 간단하게 설명하자면 1 pt(point) = 1 inches / 72 으로 절대적인 수치 1 px(pixel) = 사용하는 기기에서 이미지를 표현하기 위한 최소 단위로 상대적인 수치 이러한 수치들은 window, Mac 마다 다르게 됩니다. 그리고 핸드폰도 동일하게도 다르게 적용이 되는데, 아이폰4일 때에는 낮은 화소의 핸드폰이었으며 최신 기종으로 나올수록 화소가 높은 핸드폰이 되었습니다. 이러한 환경에 맞게 이미지를 사용해야하는데, 그 환경에 맞게끔 사용을 하도록 되었습니다. ... iPhone 3GS에서는 75 × 75 픽셀의 1x 이미지를 사용합니다. ... iPhone ..
swiftUI를 배우기 시작하면서 some이 무엇이길래, 사용이 되는 걸까? 궁금증을 시작으로 찾아보았습니다. 특정 유형의 반환이 아닌 some 을 이용해서 유형값을 특정짓지 않아도 됩니다. 하단 예제의 함수는 사다리꼴의 기본 유형을 노출하지 않고 사다리꼴을 반환을 합니다 struct Square: Shape { var size: Int func draw() -> String { let line = String(repeating: "*", count: size) let result = Array(repeating: line, count: size) return result.joined(separator: "\n") } } func makeTrapezoid() -> some Shape { let top =..
정확한 사용이 아닐 수 있지만 터미널 혹은 vscode를 통해서 코드를 확인하는 작업이 필요로 하게 되어서 정리를 하였습니다. 작성한 코드의 동작 테스트 원하는 대로 이루어지는 지 비교 테스트 C언어, C++을 사용하다보니 컴파일이 조금 더 익숙하기에 이와 같은 방법을 찾게 되었습니다. Compile은 소스코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 것입니다. swift에서 build하는 과정 (참고, 참고) swiftc 를 통한 compile // double.swift extension Double { var km: Double { return self * 1_000.0 } var m: Double { return self } var cm: Double { return self / 100.0 }..
이미 존재하는 클래스나 구조체, 열거형 등의 객체에 새로운 기능을 추가하여 확장해주는 구문입니다. extensions의 기능을 소개를 하자면, 새로운 연산 프로퍼티를 추가할 수 있습니다. 새로운 메소드를 정의할 수 있습니다. 새로운 초기화 구문을 추가할 수 있습니다. 기존 객체를 수정하지 않고 프로토콜을 구현할 수 있습니다. extension { // 추가할 기능에 대한 구현 코드를 작성 } 연산 프로퍼티 extension Double { var km: Double { return self * 1_000.0 } var m: Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 }..
optional 타입은 nil이 할당될 수도 있는 값을 의미합니다. struct Human { var name: String? var man: Bool = false } struct Univ { var univName: String? var student: Human? } var universityStudent: Univ? = Univ(univName: "Harvard", student: Human(name: "Bill", man: true)) if let univ = universityStudent { if let student = univ.student, let universityName = univ.univName { if let name = student.name { print("\(univers..
클래스에는 상속이라고 해서 부모 클래스, 자식클래스 (기본 클래스, 파생 클래스 등 부르는 이름이 여러 개 입니다)를 이용해서 클래스의 특성들을 물려받을 수 있습니다. class Animal { var age: Int = 0 func glowOld() { self.age += 1 } } class Cat: Animal { var type: String = mixed func getInTheBox() { print("\(type) cat get in the box") } } let nabi: Animal = Cat() 위 코드를 보게 되면 Cat은 Animal에 포함되기 때문에 Animal 타입의 상수에 할당할 수 있습니다. 반대로 Animal이라면 Cat 자식 클래스의 타입변수나 상수에 할당할 수 없습니..
특정 프로퍼티의 값이 변경되면 반응을 하는 구문입니다. willSet : 프로퍼티의 값이 변경되기 직전에 호출되는 옵저버 didSet : 프로퍼티의 값이 변경된 직후에 호출되는 옵저버 var : [ = ] { willSet [ () ] { } } var : [ = ] { didSet [ () ] { } } 대괄호의 경우에는 생략을 해도 됩니다. struct Job { var income: Int = 0 { willSet { if income == 0 { print("월급이 \(newValue)로 책정이 되었습니다") } else { print("월급이 \(income)에서 \(newValue)으로 변경되었습니다") } } didSet { if income > oldValue { if oldValue !=..
날짜에 대해서 설정하는 방법을 정리하고자 합니다. DateFormatter의 인스턴스는 NSDate 객체의 문자열 표현을 만들고 날짜와 시간의 텍스트 표현을 NSDate 객체로 변환합니다. DateFomrmatter methods string(from:) DateFormetter에서 날짜 설정을 통해서 지정한 날짜 문자열로 표현합니다. import Foundation var dateFormat = DateFormatter() dateFormat.locale = Locale(identifier: "en-US") dateFormat.dateStyle = .full dateFormat.timeStyle = .full var str1 = dateFormat.string(from: Date()) print(st..