본문 바로가기

코딩코오딩

[Apple Doc] Resource Programming Guide : Nib Files Nib 파일은 OS X와 iOS에서 앱의 생성에 중요한 역할을 합니다. Nib 파일을 사용해서 코드로 작성하는 대신 Xcode를 사용하여 그래픽 사용자 인터페이스를 만들고 조작할 수 있습니다. 즉각적으로 결과를 볼 수 있기 때문에 다른 레이아웃과 설정을 매우 빠르게 실험해 볼 수 있습니다. 또한 어떤 코드 재작성도 없이 사용자 인터페이스의 많은 외관을 변경할 수 있습니다. AppKit이나 UIKit 프레임워크들을 사용하여 생성된 앱에 대해 nib 파일은 추가적인 중요성을 갖습니다. 이 두 프레임워크들은 윈도우나 뷰 그리고 컨트롤들의 배치와 이러한 아이템들의 이벤트 처리 코드를 통합을 위해 nib 파일의 사용을 지원합니다. Xcode는 사용자 인터페이스의 컨트롤과 이 컨트롤들에 응답해야 하는 객체들을 연결.. 더보기
[Apple Doc] Resource Programming Guide : Introduction About Resources 리소스는 실행코드와 함께 제공되는 데이터 파일입니다. 리소스는 복잡한 데이터 집한 또는 그래픽 콘텐츠의 생성을 코드 외부나 보다 적절한 도구로 이동하여 작성해야 하는 코드를 단순화합니다. 예를 들어 코드로 픽셀 하나하나 생성하는 것 대신에 이미지 에디터를 사용해서 만드는 것이 보다 효율적입니다. 이러한 리소스의 이점을 얻기 위해서는 런타임에 리소스를 읽어 들여서 사용하기만 하면 됩니다. 코드를 단순화 하는 것 외에도 리소스는 국제화 처리를 위해 밀접한 부분입니다. 문자열이나 기타 사용자가 볼 수 있는 콘텐츠를 하드코딩하는 것보다 외부 리소스 파일에 배치할 수 있습니다. 그러면 지원되는 언어를 위한 각각의 리소스 파일을 생성하는 간단한 처리만으로 앱의 지역화를 할 수 있습니다... 더보기
[Apple Doc] File System Basics 파일 시스템은 데이터 파일, 앱 그리고 운영 체제와 관련된 파일의 영구적인 저장을 처리합니다. 따라서 파일 시스템은 모든 프로세스에서 사용되는 기본 자원 중 하나입니다. macOS, iOS, watchOS, and tvOS의 기본 파일 시스템은 APFS입니다. APFS는 iOS 10.3 이상 macOS High Sierra 이상에서 HFS+를 대체합니다. 기본 형식에 관계없이 장치에 연결된 모든 디스크는(물리적으로 연결되었던 네티워크를 통해 간접적으로 연결되었던) 단일 파일 모음을 생성할 수 있는 공간을 제공합니다. 파일 수는 쉽게 수백만 개가 될 수 있기 때문에 파일 시스템은 디렉터리를 사용하여 계층적으로 구성됩니다. iOS와 macOS의 기본 디렉터리 구조는 비슷하지만 각 시스템이 앱과 사용자 데이터.. 더보기
[Swift] String - #7 Initializer(5) : Creating a String from a File or URL Creating a String from a File or URL init(contentsOf: URL) init(contentsOf: URL, encoding: String.Encoding) init(contentsOf: URL, usedEncoding: inout String.Encoding) init(contentsOfFile: String) init(contentsOfFile: String, encoding: String.Encoding) init(contentsOfFile: String, usedEncoding: inout String.Encoding) 외부 리소스로부터 String을 초기화하는 방법으로 init(contentsOf: URL), init(contentsOfFile: String).. 더보기
[Swift] String - #7 Initializer(4) : Converting Other Types to Strings Converting Other Types to Strings init(_ value: T) where T : LosslessStringConvertible - LosslessStringConvertible 타입을 입력받아 String을 생성한다. - LosslessStringConvertible은 무손실 문자열을 나타낼 수 있는 타입이다. 예를 들어 integer value 1050은 문자열 "1050"으로 전체를 나타낼 수 있듯이 이 타입을 원래의 integer value 1050으로 다시 만들 수 있어야 한다. - [TODO, FIXME] LosslessStringConvertible 의 사용처는 확실하게 모르겠다.ㅠ 아래 타입들이 LosslessStringConvertible 프로토콜을 따르고 있으.. 더보기
[Swift] String - #7 Initializer(3) : Converting a C String Converting a C String init?(bytes: S, encoding: String.Encoding) where S : Sequence, S.Element == UInt8 - 주어진 인코딩에 따라 주어진 시퀀스를 사용해서 String을 생성한다. init?(bytesNoCopy bytes: UnsafeMutableRawPointer, length: Int, encoding: String.Encoding, freeWhenDone flag: Bool) - 주어진 바이트 버퍼에서 주어진 인코딩 방식으로 주어진 바이트 수 만큼으로 String을 생성한다. - 이 초기화 메소드는 memory-safe하지 않다. init(cString:UnsafePointer) init(cString: UnsafeP.. 더보기
[Swift] String - #7 Initializer(2) : Converting Numeric Values Creating a String Using Formats init(format: String, _ arguments: CVarArg...) init(format: String, arguments: [CVarArg]) - 포맷 문자열을 통해서 String을 초기화 할 수 있다.(자세한 포맷은 String Format Specifiers 을 참조) let str1 = String(format: "%@ %d개.", "사과", 5) // "사과 5개." let str2 = String(format: "%@ %d개.", arguments: ["사과", 6]) // "사과 6개." init(format: String, locale: Locale?, _ args: CVarArg...) init(format: Stri.. 더보기
[Swift] String - #7 Initializer(1) : Creating a String from Unicode Data Creating a String init() - 빈 문자열을 생성합니다. init(_ c: Character) - Character를 초기값으로해서 문자열을 생성 합니다. init(_ characters: S) where S : Sequence, S.Element == Character init(_ elements: S) where S : Sequence, Self.Element == S.Element init(_ other: S) where S : LosslessStringConvertible, S : Sequence, S.Element == Character - Sequence protocol을 따르는 instance를 통해서 문자열을 초기화 합니다. init(_ substring: Substring.. 더보기
[Swift] String - #6 Unicode 유니코드 문자열을 파일에 쓸 때 유니코드 스칼라는 몇 가지 유니코드 인코딩 형식(UTF-8, UTF-16, UTF-32)으로 인코딩 된다. 각 인코딩 형식은 code unit이라는 작은 덩어리(chunk)로 인코딩 된다. Swift는 문자열의 Unicode 표현에 접근하기 위한 몇 가지 방법을 제공한다. for-in loop 구문을 사용하여 문자열을 interator 할 수 있고, 유니코드 확장 문자소 클러스터의 개별 Character에 접근할 수도 있다. UTF-8 표현 String의 utf8 프로퍼티를 반복해서 UTF-8의 표현에 접근할 수 있다. 이 프로퍼티는 String.UTF8View 타입이고 unsigned 8-bit(UInt8) 값의 collection이다. let dogString = "D.. 더보기
[Swift] String - #5 Comparing Strings 문자열 비교 String은 '==', '!=' operator를 사용해서 비교한다. let quotation = "We're a lot alike, you and I." let sameQuotation = "We're a lot alike, you and I." if quotation == sameQuotation { print("These two strings are considered equal") } // Prints "These two strings are considered equal" 확장 문자소 클러스터에 의해서 실제 다른 유니코드 스칼라의 조합이더라도 언어적인 의미와 모양이 같은 경우에 동일하다고 판단한다. 아래 그림과 같이 \u{E9}나 \u{65}\u{301}는 모두 é를 나타내는 확장.. 더보기
[Swift] String - #4 Substrings - String의 subscript나 prefix같은 메소드를 사용해서 얻은 부분 문자열은 Substring 타입이다. - Substring은 String의 메소드 대부분을 동일하게 사용할 수 있다. - Substring은 성능 최적화를 위해서 실제로 copy, modify가 일어나기 전까지는 Origin String이나 다른 Substring을 저장하는데 사용된 메모리의 일부를 재사용한다. - Substring 예제 더보기 let greeting = "Hello, world!" let index = greeting.firstIndex(of: ",") ?? greeting.endIndex let beginning = greeting[.. 더보기
[Swift] String - #3 String.Index String.Index - Swift의 String은 String.Index타입을 사용해서 String을 구성하는 Character 위치를 나타낸다. - Character가 유니코드 스칼라 여러 개로도 구성될 수 있기 때문에 단순히 정수형 값으로 인덱스를 구할 수 없다. - startIndex는 문자열의 처음과 끝의 위치를 나타낸다. endIndex는 마지막 문자 뒤의 위치를 나타내기 때문에 subscript에 endIndex를 사용하면 안 된다. - index(before:), index(after:) 함수를 사용하여 인덱스의 앞, 뒤 문자를 접근할 수 있다. - index(_:offsetBy:) 함수를 사용해서 주어진 인덱스로부터 offset 만큼 떨어진 문자를 접근할 수 있다. 삽입 - insert.. 더보기
[Swift] String - #2 Characters - String을 for-in loop 구문을 사용해 각 Charcter에 접근 할 수 있다. for character in "Dog!🐶" { print(character) } - Character 타입으로 변수를 생성할 수 있다. let exclamationMark: Character = "!" - Character Array를 사용하여 String을 초기화 할 수 있다. let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"] let catString = String(catCharacters) print(catString) // Prints "Cat!🐱" - String에 append() 함수를 사용하여 Character를 추가 할 수 있다. let e.. 더보기
[Swift] String - #1 String Literals Swift 5 버전을 기준으로 작성. let greeting = "Welcome!" // 멀티라인 초기화 let banner = """ __, ( o /) _/_ `. , , , , // / (___)(_(_/_(_ //_ (__ /) (/ """ // 멀티라인 초기화 구문에서 // 마지막 quotation marks(""")앞의 공백은 Indent를 얼마만큼 할 것인가를 나타내는 용도이다. let multilineIndent = """ This line doesn't begin with whitespace. this line begins with four spaces. It also ends with a line break. """ // <--- """ 앞의 공백 // 위의 것과 동일하다. let mu.. 더보기