swift
-
Swift Property - 1Programming/Swift(iOS) 2021. 4. 1. 22:57
프로퍼티는 접근자의 메소드를 자동으로 생성하는 기술이라고 볼 수 있습니다. 예를 들면, positionX의 값을 구하는데 있어서 x의 좌표가 필요하다고 합니다. 그렇다면 아래와 같이 get블럭 안에서 계산된 값을 전달 받을 수 있습니다. 이를 계산 프로퍼티 혹은 연산 프로퍼티라고 합니다. let x:Int = 10 let positonX:Int { get { return x + 10 } } 단순히 var로 된 변수를 선언하는 것은 저장 프로퍼티라고 합니다. swift에서는 상수, 변수냐에 따라서 get, set을 사용하는 범위가 달라집니다. let -> get var -> get, set let은 한번 정해지면 변할 수 없는 값이기 때문에 set을 할 수가 없습니다. 또하느 계산프로퍼티는 어떻게 보면 프..
-
Swift Enum - 4Programming/Swift(iOS) 2021. 4. 1. 22:33
이번에는 enum rawValue를 이용해보겠습니다. 아래 코드의 문제는 뭘까요? switch의 case에 문자열로 구분하므로, 실패(default)에 대한 구현을 항상해야됩니다. 반환값이 String Optional이므로 호출부에서 if let ~으로 한번 더 처리해야된다. 대문자를 따로 해줘야 한다. func getAvatarImageFileName(for fileExtension:String) -> String? { switch fileExtension.lowercased() { //문자열에 대한 switch ~ case 처리는 현재 case 이외의 값도 올 수 있으므로 default를 추가해야된다 case "jpg", "jpeg": return "avatar.jpg" case "bmp": retu..
-
Swift Enum - 3Programming/Swift(iOS) 2021. 4. 1. 21:15
이번에는 enum을 가지고 struct나 class를 대체하는 것을 공유하려고 합니다. 아래 두 struct를 보면, 중복된 속성이 존재합니다. struct User { let email:String let password:String let joinDate:Date var level:Int var exp:Int } struct Admin { let email:String let password:String let joinDate:Date var logs:[String] } 중복된 속성을 해결하려면 어떻게 해야될까요? 클래스의 상속을 이용하면 부모클래스에 공통 속성을 두고, 자식 클래스에서 사용하면 됩니다. 하지만 부모 클래스에 변경이 있을 때 자식 클래스에서도 변경을 해줘야 되므로 기존 설계 구조를 계..
-
Swift Enum - 2Programming/Swift(iOS) 2021. 4. 1. 20:58
enum 두번째 예제입니다. 아래 예제에서 arr를 순회하면서 출력하려면 arr의 요소에 따라서 분기하는 처리가 필요합니다. 또한 'Any' 타입이기때문에 switch ~ case에서 항상 'default'가 붙어야 합니다. let arr:[Any] = [ Date(), "Hello", 100, 3.14] for element in arr { switch element { case let v as Date: print("Date - \(v)") case let v as String: print("String - \(v)") case let v as Int: print("Int - \(v)") case let v as Float: print("Float - \(v)") default: print("unSu..
-
Swift TupleProgramming/Swift(iOS) 2021. 4. 1. 20:40
Swift에서 사용하는 Tuple에 대한 정리 'Tuple'은 서로 다른 타입을 하나로 묶어서 저장할 수 있습니다. 아래와 같이 문자열, Int, Float을 하나로 묶어서 표현 가능합니다. var t = ("Hello Wolrd", 1, 2.5) 이제 함수에서 Tuple을 return하는 방법입니다. func foo() -> (String, Int) { return ("Tom", 42) } // return 된 값을 임시로 0,1로 표현 var result = foo() print("\(result.0), \(result.1)") var (name, age) = foo() print(name, age) func foo2() -> (name:String, age:Int) { //넘겨줄 Data의 name..
-
Swift 언어의 특징Programming/Swift(iOS) 2021. 4. 1. 00:06
회사에서 교육받은 Swift 언어 교육을 정리해보려한다. 장점 고성능 함수형 프로그래밍 프로토콜 지향 프로그래밍 - POP(Protocol Oriented Programming) 강력한 컴파일 타임 언어 단점 모듈 호환성이 떨어진다. 엄격한 타입 체크 - 다른 언어에 비해 상대적으로 엄격하다. 프로토콜이 난해하다. 동시성 지원이 떨어진다. - 언어적으로 지원되는 기능이 없다. - 3rd party 기능으로 지원 해주고 있다. (GCD, Reactive, Extension(RxSwift)) Applet Platform에 종속적이다. - 리눅스 기반에서도 사용가능하지만, 지원하는 패키지 수자 적다. - 결국 맥북 사라는 얘기다. 컴파일 시간 - LLVM 기반의 컴파일러를 이용하므로써, 정적 분석등 유용한 ..
-
Xcode CommandLine ProjectProgramming/Swift(iOS) 2021. 3. 31. 23:59
XCode를 사용하면서 간단히 알아볼 수 있는 것들은 PlayGround를 열어서 코딩했었다. 하지만, 어시턴트같은게 잘 지원이 안되는거 같은 느낌(?)을 받고 있었는데, 이번 교육에서 XCode Project를 Command Line Project로 만들어서 사용하면 된다는걸 배웠다. (아마도 Visual Studio에서 C++ project를 빈 프로젝트로 만드는 것이랑 비슷한것 같다.) XCode에서 Project를 새로 만들었을 때, "macOS - Command Line Tool" 선택한다. Target Membership이 현재 빌드에 포함시키는지 여부를 결정한다. 즉, 파일이 여러개라면 Target Membership 체크에 여부에 따라서 빌드에 포함시킬지/제외시킬지 결정할 수 있다. 그리고..