Language/Swift

    Swift 클로저

    Swift 클로저

    Closures입니다. closer 아닙니다!! ㅎㅋㅋ 참조 타입인 클로저란 코드의 블럭을 뜻합니다. 자세히 설명하자면, 코드안에서 전달되어 사용할 수 있는 로직을 가진 코드의 코드의 블럭이며 {}로 구분됩니다. 일급 시민 취급이라 전달인자 및 변수, 상수들으로 저장, 전달이 가능합니다. 함수는 클로저의 일종으로 이름이 있는 클로저라고 생각하면 된다고 합니다. 전역 함수 : 이름이 있고 어떤 값도 캡쳐하지 않는 클로저 중첩 함수 : 이름이 있고 관련한 함수로 부터 값을 캡쳐 할 수 있는 클로저 클로저 표현 : 경량화 된 문법으로 쓰여지고 관련된 문맥(context)으로부터 값을 캡쳐할 수 있는 이름이 없는 클로저 Swift에서 클로저는 다음과 같은 내용을 포함해 최적화되어 있습니다. 문맥(context)..

    Swift 사용자 정의 타입 - 값타입과 참조 타입 [추가정리]

    Swift 사용자 정의 타입 - 값타입과 참조 타입 [추가정리]

    사용자 정의 타입에서 나온 3가지 종류 기억하시나요? 구조체, 클래스, 열거형 세 종류입니다. 이 세 종류를 타입으로 분류하면 다음과 같습니다. 값 타입 : 구조체, 열거형 참조 타입 : 클래스 그리고 참조타입은 값 타입과 달리, 상속이 가능하고 deinit 및 참조횟수 계산이 가능합니다. 더불어 인스턴스에 타입 캐스팅이 가능합니다. 그리고 차이점을 추가로 더 서술해 보겠습니다. struct One{ var value = 1 } let str = One() var str2 = str str2.value = 2 print(str) // 1 print(str2) // 2 class One{ value = 1 } let cla = One() let cla2 = cla cla2.value = 2 print(cl..

    Swift 사용자 정의 타입 - enum

    Swift 사용자 정의 타입 - enum

    swift의 열거형은 다른 언어와는 많이 다름으로 잘 살펴봐야 합니다. 기본 형태 enum EnumName{ //한줄에 하나씩 정의도 가능하고 case one case two //한줄에 여러개 정의도 가능합니다. case three, four, five } 인스턴스 생성 var count = EnumName.one * count는 초기화시에 타입추론이 되서 EnumName의 형을 갖게 됩니다. 축약형 문법 (dot syntax) count의 형이 EnumName으로 한번 정의되면, 다음 값을 할당시 형을 생략한 점문법을 이용해서 값을 항당하는 축약형 문법을 사용할 수 있습니다. enum EnumName{ case one case two case three, four, five } var count = E..

    Swift 사용자 정의 타입 - Class

    Swift 사용자 정의 타입 - Class

    클래스는 참조 타입입니다. 구조체와 쓰임이 비슷하지만, 구조체와는 다르게 상속할 수있고, deinit를 사용할수 있으며, 참조횟수 계산도 가능합니다. 또한, 클래스의 인스턴스에 타입 캐스팅이 가능합니다. 기본 형태 class ClassName{ //구현부 } 예제 class Food{ //불변 프로퍼티 //가변 프로퍼티 var name: String var price: Int //타입 프로퍼티 final class var writer:String{ return "녹색하늘" } class var location: String{ return "안양" } //생성자 init(){ name = "" price = 0 } init(name: String, price: Int){ self.name = name se..

    Swift 사용자 정의 타입 - Struct

    Swift 사용자 정의 타입 - Struct

    Struct는 '값 타입' 입니다. 스위프트의 대부분의 타입은 구조체로 이루어져 있습니다. 구조체는 클래스와 합께 OOP를 위한 필수요소이며, 프로그램의 코드를 추상화하기 위해 사용합니다. siwft의 구조체는 다른 언어와는 다르게 별도의 인터페이스 파일을 만들 필요가 없습니다. 구조체와 클래스는 모두 새로운 데이터 타입을 정의하고 기능을 추가합니다. 하지만 구조체는 '값 타입', 클래스는 '참조 타입'이라는 차이가 있죠. 둘중 하나를 어떤 기준으로 선택해서 사용해야 할까요? 애플 공식 문서에서는 다음 조건 중 하나 이상에 해당된다면 구조체 사용을 권합니다. 연관된 간단한 값의 집합을 캡슐화 하는 것만이 목적일 때 캡슐화된 값이 참조되는 것보다 복사되는 것이 합당할 때 구조체에 저장된 프로퍼티가 값 타입..

    Swift 옵셔널

    Swift 옵셔널

    let greensky: Person? = Person(name: "greensky") let apart: Apartment? = Apartment(dong: 101, ho: 702) let kim: Person? = Person(name: "kim") Optional? 옵셔널은 변수의 값의 nil 일수 있다는 것을 표현합니다. 그말인즉슨... 변수가 가변형일때 값이 부재할 수 있다는것을 표현하는 것이죠. 반대로 논-옵셔널의 경우에는 변수가 nil일 수 없다는것을 표현하겠죠? 따로 옵셔널 표현을 쓰지 않았다면, 기본값은 논-옵셔널입니다. nil에 대한 예외처리를 강제해 틈만나면 나타나서 괴롭히는 null 에러를 사전에 예방할 수 있다는게 큰 장점인거 같습니다. 예를 들면, swift는 키보드입력값에 바인..

    Swift 반복문

    Swift 반복문

    Swift에서 반복문은 for-in, while, repeat-while 세가지입니다. 1. for - in for-each 구문과 유사합니다. 초기식에 따라 조건식을 판단해 실행하고, 변환식을 계산합니다. 조건식이 참일 경우 검사를 계속 진행하고, 거짓일 경우는 종료합니다. 일정 횟수동안 반복해야하는 경우 사용합니다. 기본 형식 for 반복문 안에서 사용할 변수명 in 바구니 객체{ 수행할 작업 } 간단 예제 구구단 for x in 2...9{ print( 2*x ) } 1~100까지의 총 합 //1부터 100까지의 합 var total: Int = 0; for x in 1...100{ var sumBefore = total total = total + x print("\(sumBefore)+\(x) ..

    Swift 다양한 switch-case 패턴들

    Swift 다양한 switch-case 패턴들

    *현재 작성중인 문서입니다. 열거형 케이스 패턴, 옵셔널 패턴, 타입캐스팅 패턴, 표현 패턴 은 차후 작성할 계획입니다. ,를 사용해 여러개 지정 //무작위로 0~10 사이의 숫자를 지정합니다. let ranNum = Int.random(in: 0...10) switch ranNum { case 1,3,5,7,9: print( "홀수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." ) case 2,4,6,8,10: print( "짝수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." ) case 0: print( "0를 뽑았습니다." ) default: print("unknown error") } 범위연산자 사용 //무작위로 0~10 사이의 숫자를 지정합니다. let ranNum = Int.ra..

    Swift의 조건문

    Swift의 조건문

    Swift의 조건문은 if-sele와 switch-case문으로 나뉩니다. if-else 구문 if-eles구문의 형태 및 사용 java와 동일한 if-else 구조를 가집니다. 단, 조건값을 감싸는 소괄호는 선택사항인 점이 다릅니다. 기본 형태 //조건은 항상 Bool 타입이 와야 함. if 조건 { // if 조건에 만족시 실행 } else if 조건 { // if 조건에 해당하지 않고 else if 만족시 실행 } else { // if, else if 조건에 모두 해당하지 않을때 실행 } 간단한 사용 예제 let priceOfApple = 4000 let priceOfBanana = 3000 if priceOfApple > priceOfBanana { print("사과는 바나나보다 비쌉니다.") ..

    Swift 함수 고급

    Swift 함수 고급

    매개변수에 기본값 지정 //매개변수의 타입을 지정한 뒤에 "=기본값"을 입력해 기본값을 지정합니다. func funcName(parameter1: String, parameter2: String="다다익선"){ print("\(parameter1)은(는) \(parameter2)!") } //기본값을 가지는 매개변수는 호출시 생략 가능. funcName(parameter1:"공부") //공부은(는) 다다익선! funcName(parameter1:"게임", parameter2:"적당히") //게임은(는) 적당히! 전달인자 레이블 사용 전달인자 레이블은 함수를 호출해서 사용할 떄, 변수들을 쉽게 구분하기 위한 용도로 사용합니다. 별다른 명칭없이 넣고 싶다면 _를 사용하면 됩니다. func func1(from..

    Swift 간단한 사칙연산

    Swift 간단한 사칙연산

    let a = 8 let b = 5 var result: Int //덧셈 func sum(num1: Int, num2: Int)->Int{ return num1+num2 } result = sum(num1: a,num2: b) print(result) //13 //뺄셈 func sub(num1: Int, num2: Int)->Int{ return num1-num2 } result = sub(num1: a,num2: b) print(result) //3 //곱셈 func mul(num1: Int, num2: Int)->Int{ return num1*num2 } result = mul(num1: a,num2: b) print(result) //40 //나눗셈 func div(num1: Int, num2: I..

    Swift 함수의 선언과 호출

    Swift 함수의 선언과 호출

    함수 선언 //반환값이 있는 함수 func functionName(parameter1 : String, parameter2 : Int) -> String{ return "결과값" } //반환값이 없는 함수 fun noReturnFunc(parameter1 : String) -> Void{ print(parameter1) } //Void는 생략가능합니다. fun noReturnFunc(parameter1 : String) -> { print(parameter1) } //매개변수와 반환값이 없는 경우 func justPrint(){ print("just print") } 함수 호출 func sum(num1: Int, num2: Int)->Int{ result num1+num2 } sum(num1: 2, su..

    Swift 기초 개념 및 데이터 타입

    Swift 기초 개념 및 데이터 타입

    상수와 변수 상수 선언 let 이름: 타입 = 값 상수는 이름그대로 선언한 값 고정 변수 선언 var 이름: 타입 = 값 변수는 이름그대로 값 변경 가능 ! 값이 명확하다면 타입은 생략할 수 있다. 그러나 나중에 할당하려고 하는 상수나 변수는 타입을 명시하여야 한다. var name:String let age:Int name = "녹색하늘" age = 20 print("나의 이름은 \(name)입니다") //나의 이름은 녹색하늘입니다 name = "하늘" print("나의 이름은 \(name)입니다") //나의 이름은 하늘입니다 기본 데이터 타입 Int : 64비트 정수형 UInt : 64비트 양의 정수형 Float : 실수타입 32비트 부동소수형 : 소수점이하 6자리 Double : 실수타입 64비트 ..

    Swift API 설계 지침

    Swift API 설계 지침

    * 계속 공부하며 수정될 문서입니다. 마지막 업데이트 3/8 Apple devloper 공식 가이드를 참고하며 공부했습니다. https://swift.org/documentation/api-design-guidelines/ Swift.org Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns. swift.org 기초 사용 시점의 명확성 엔터티는 한번 선언하지만 반복적으로 사용된다. 그러기에 용도가 명확하고 간결해야 합니다. 간결함 < 명확성 최소한의 문자로 가능한 한 작은 코드를 사용하는것이 코딩의 목표는 아닙니다. 주석 문..

    Swift mark down 활용하기

    Swift mark down 활용하기

    mark up "(mark) 또는 tag로 둘러싸인 언어로써 문서나 데이터의 구조를 명기하는 언어이다. mark down 작성한 텍스트를 Mark up으로 변환해주는 언어. swift 에선 /// 또는 /***/를 이용한다. 공식문서 : https://swift.org/documentation/api-design-guidelines/ Swift.org Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns. swift.org 참고 : https://nsios.tistory.com/63 [Swift] MarkUp Overview ..

    Swfit란 뭘까?

    Swfit란 뭘까?

    mac OS, iOS, watchOS, tvOS등 apple사의 플랫폼을 위한 프로그래밍 언어이다. 공식 사이트에서는 스위프트를 3가지 특징으로 표현한다. Safe 안전한 프로그래밍을 지향한다. 사용전 변수 초기화, 배열 및 정수에 대한 오버플로우 검사, 자동적으로 관리되는 메모리와 같은 기능들과 엄격한 문법을 적용해 프로그래머의 실수를 미연에 방지합니다. Fast 스위프트는 C언어와 동등한 성능을 일정한 수준으로 유지하는데 초점을 맞춰 개발되었습니다. 예를들자면, 가상머신 상에서 바이트코드⁽¹⁾로 실행되는 것이 아니라 C처럼 기계어로 번역되어 사용된다는 점이 있죠. 실행속도 최적화 및 컴파일러의 지속적인 개량을 통해 더 빠른 성능을 구현해 가고 있습니다. Expressive 다양한 언어의 장단점을 참고..

    [개발환경 구축] VMware로 mac os를 설치해보자[2]

    [개발환경 구축] VMware로 mac os를 설치해보자[2]

    먼저 아래 블로거에게 감사를 표합니다. https://itmir.tistory.com/676 AMD Ryzen CPU로 VMWare에서 Mac OS 설치하기 서론 라이젠 CPU에서 VMware로 Mac OS인 Catalina를 설치하는 방법이다. 이 유튜브 영상을 참고하면 더 이해하기 쉬울 것이다. 이번 포스팅은 카탈리나 버전을 설치하는 영상이므로 빅 서 버전은 이 영 itmir.tistory.com 방법은 위의 블로그에 기술한대로 그대로 하면 구축이 완벽하게 되므로, 자세한 방법은 위 블로그를 참조하시고 저는 구축하면서 발생한 에러나 제가 했던 실수를 기술하려고 합니다. 0. AMD cpu에선 vmware로 mac os 구축이 안된다? 먼저 결과를 말씀드리자면 구축 가능합니다. VMware에서 inte..

    [개발환경 구축] VMware로 mac os를 설치해보자[1]

    [개발환경 구축] VMware로 mac os를 설치해보자[1]

    IOS App 개발을 위해 개발환경을 구축해보려고 한다. 우선, 맥과 IOS를 위한 애플의 공식적인 IDE인 Xcode를 설치해서 사용해보려고 했는데, Xcode는 mac os환경에서만 사용을 할 수가 있더군요. 그래서 VMware에 mac os를 구동시켜 보기로 했습니다. 물론, 굳이 이럴필요 없이 mac을 클라우드 환경으로 원격 대여하는 방법도 있습니다. 아래 링크에 종류와 방법이 자세히 나와있습니다. (영문주의 ㅎㅎ) codewithchris.com/xcode-for-windows/ You can run Xcode on Windows! Here are 12 different ways to use Xcode on Windows and do iOS development on a PC. You don't..