swift

    Alamofire를 통해 POST/GET 통신하기

    Alamofire를 통해 POST/GET 통신하기

    Alamofire는 swift의 Foundation networking을 기반으로 한 http 네트워킹 라이브러리 입니다. 네트워크 작업을 단순화 시켜주어서 굉장히 쓰기 편리합니다. 굉장히 다양한 기능이 있는데요, 그중 GET/POST 방식으로 http통신을 해서 응답값을 받아오는것 까지 구현해보도록 하겠습니다. Alamofire은 크게 다음과같이 두가지로 나뉩니다. request url : 메시지를 보내고 응답을 요청할 인터넷 URL 주소 method : .get (post사용시에는 아이에 다른 방법으로 사용합니다.) parameters : 요청시 같이 보낼 파라미터 encoding : 사용할 encoding 방식 (URL, JSON, PropertyList 세가지 지원) hearder : [Strin..

    Swift에서 정규식 사용하기

    Swift에서 정규식 사용하기

    서론 Swift 언어 자체에서는 정규식을 지원하지 않아서 별도의 클래스를 이용해야 합니다. NSPredicate는 콜렉션 안의 내용을 검색하거나 필터링하는 용도로 많이 사용되구요 NSRegularExpression가 유니코드 문자열에 적용되는 정규식을 표현하므로, NSRegularExpression를 사용한 정규식 표현들을 알아보도록 하겠습니다. NSRegularExpression의 정규식 메타 문자 * u으 = uhhhh \x{으} = \xhh 엔 = n 무늬 = pattern 정규식 연산자 *엔 = n 템플릿 일치 양식 * 엔 = n 플래그 옵션 * 패턴은 i , x, s, m, w 순 입니다. 통으로 변역기를 돌려서 표현이 좀 이상할수도 있습니다 ^^;; 표현식은 공식 문서 참고하시면 되겠습니다. ..

    [Swift] 고차함수 Map, Filter, Reduce

    [Swift] 고차함수 Map, Filter, Reduce

    기본적인 라이브러리를 공부하고 해야지 해야지 하다가 놓친게 있었는데 코딩테스트를 하다가 계속 반복해서 찾게 되어서 별도로 포스팅 해보았습니다. 0. 고차함수란? 다른 함수의 전달인자를 함수로 받거나, 함수실행의 결과를 함수로 반환하는 함수입니다. 1. Map 배열 원소의 변형에 매우 효과적입니다. var arr: [String] = ["Apple", "Banana", "Mango"] let lowwer = arr.map{ $0.lowwercased() } //lowwer = ["apple", "banana", "mango"] var chars: [Characters] = ["1", "2", "3", "4", "5"] let toInt = chars.map{ $0.isWholeNumber! } //toIn..

    [Swift] GCD로 경마 구현해보기

    [Swift] GCD로 경마 구현해보기

    제가 플젝으로 말 육성 및 경마 게임을 제작하고 있는데요, java에선 그렇게 많이 돌아다니는 경마게임 예제가 swift에서는 찾아보기 힘든거 같아 경주부분만 떼어서 공유를 해보려고 합니다. 많이 부족한 코드지만 도움되었으면 좋겠구요 지적이나 오류도 댓글로 남겨주신다면 성실히 답변 해드리겠습니다. Race 클래스 /** - arr : 참가한 말들의 배열 - rnak : 참가한 말들이 골인시 순서대로 추가되는 배열 - lenth : 경주 길이 */ class Race { var raceProgress: [Int] = [] var rank: [Int] = [] var lenth: Int /** - Parameters: - numOfHorse: 경주에 참여하는 말의 수 - lenth: 경주 길이 */ init..

    Swift 프로토콜 지향 프로그래밍 (POP)

    Swift 프로토콜 지향 프로그래밍 (POP)

    애플은 15년에 WWDC에서 Swift는 프로토콜 지향언어라고 말했습니다. 이번 글에선 프로토콜과 익스텐션의 조합으로 프로토콜 지향 프로그래밍을 공부해 서술하도록 하겠습니다. 프로토콜 초기구현 프로토콜 초기구현이란 프로토콜의 요구사항을 익스텐션을 통해 구현하는 것 입니다. Extension은 기존 타입의 기능을 확장하고, Protocol은 프로토콜을 정의할 때 요구사항만을 정의할 뿐 구현은 불가능합니다. 이 두가지를 조합해, 익스텐션에서 프로토콜이 요구하는 기능을 구현해 줄 수 있습니다. 단, 저장 프로퍼티는 익스텐션에서 구현할수 없으므로, 각 타입에서 직접 구현해야합니다. 예제 메세지를 수신받는 Receiveable 포로토콜 입니다. machine과 name를 통해 수신받은 기기와 수신자를 저장합니다...

    Swift 접근제어

    Swift 접근제어

    접근제어란? 정보의 은닉화를 구현하기 위한 핵심 기능이 접근제어 입니다. 접근제어는 말그대로 접근을 제한할 수 있는 기능입니다. 이를통해 상세 구현은 숨기고, 허용된 기능만 사용하는 인터페이스를 제공할 수 있죠. 외부에서 보거나 접근하면 안되는 코드를 숨길 수 있고, 불필요한 접근으로 의도하지 않는 결과가 나올 수 있는 경우에 접근제어를 이용합니다. 스위프트의 접근제어는 모듈과 소스파일을 기반으로 설계됩니다. 모듈 모듈은 코드를 배포하는 단일 단위의 하나로, 프레임워크나 앱이 이 단위로 배포되고 import 키워드로 import할 수 있습니다. 소스파일 소스파일은 모듈안에 있는 소스파일을 의미합니다. 접근레벨 스위프트에서는 4개의 접근레벨을 제공합니다. 1. open & public 다른 모듈에서도 사용..

    Swift 고차함수

    Swift 고차함수

    고차함수란 다른 함수를 전달인자로 받거나, 함수실행의 결과로 함수를 반환하는 함수를 뜻합니다. 함수의 외부에서 실행 흐름을 변형할 수 있기 때문에 재활용성 및 재사용성을 높여 주는 편리한 함수라고 할 수 있겠습니다. 이중 대표적인 map, filter, reduce를 공부해보도록 하겠습니다. map 컬렉션 내부의 기존 데이터를 변형해 새로운 컬렉션을 생성합니다. fucn map(_ transform: (String) throws -> T) rethrows -> [T] 예제 let numArr: [Int] = [1, 2, 3, 4, 5] var squardArr: [Int] = [] var stringArr: [String] = [] for문 사용 for num in numArr{ squardArr.app..

    Swift 익스텐션 (Extensions)

    Swift 익스텐션 (Extensions)

    익스텐션을 이용해 클래스, 구조체, 열거형, 프로토콜 등 모든 타입에 기능을 추가할 수 있습니다. 심지어 원본 코드를 몰라도 타입만 알고있다면 기능을 확장할 수 있습니다. 참고로, 기능은 추가가 가능해도 override는 불가합니다! 익스텐션을 이용해 가능한 기능들은 다음과 같습니다. 계산된 인스턴스/타입 프로퍼티의 추가 인스턴스/타입 메소드 추가 새로운 이니셜라이저 제공 서브스크립트 정의 중첩타입의 선언과 사용 특정 프로토콜을 따르는 다입 만들기 추가로, 익스텐션은 외부 라이브러리나 프레임워크에 대해도 사용할 수 있습니다. 특히, 프로토콜과 함께 사용한다면 굉장히 강력한! 기능이라고 하니 이는 나중에 또 공부해서 포스팅 해보도록 하겠습니다. 정의 extension TypeName { //구현부 } //..

    Swift 프로토콜 기초

    Swift 프로토콜 기초

    프로토콜은 특정 기능 수행에 필수적인 요소를 정의한 청사진입니다. 프로토콜을 만족시키는 타입을 '프로토콜을 따른다'고 표현할 수 있습니다. 또한 프로토콜은 필수 구현 및 기능 추가를 위해 확장이 가능힙니다. 프로토콜의 요구사항을 충족시키려면, 프로토콜이 제시하는 정사진의 기능을 모두 구현해야 합니다. 즉, 프로토콜은 기능을 정의하고 제시만 할 뿐 구현된 상태는 아닙니다. java의 interface와 굉장히 유사한데 몇가지 차이가 있습니다. 프로토콜은 초기값 지정이 불가능하고 static이 사용 가능하며 옵셔널로 선언된 멤버는 구현을 안해도 된다는 점이 차이입니다. 구현 protocol Weapon { var name: String { get, set } var type: String { get } va..

    Swift 인스턴스의 생성과 소멸

    Swift 인스턴스의 생성과 소멸

    프로퍼티 기본값 Swift에선 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어야 합니다. 미리 기본값을 할당하면 생성과 동시에 초기값을 지니게 됩니다. class Someone { var name = "미입력" var age = 0 func call() { print( "\(self.name)은 \(self.age)살 입니다." ) } } let greensky: Someone = Someone () greensky.call() //미입력은 0살 입니다. greensky.name = "Greensky" greensky.age = 20 greensky.call() //Greensky은 20살 입니다. 이니셜라이저 사용 기본값 지정이 불가능하거나 사용이 어려운 경우엔 이니셜라이저를 사용합니다..

    Swift 프로퍼티 타입들

    Swift 프로퍼티 타입들

    프로퍼티는 속성이라고도 불린다. 객체의 일부로, 이름과 값 사이의 연결을 의미힌다. 즉, 프로퍼티는 객체를 구성하는 블록(내부의 속성)들이다. 프로퍼티의 종류는 5가지로 나눌 수 있다. 인스턴스 저장 프로퍼티 타입 저장 프로퍼티 인스턴스 연산 프로퍼티 타입 연산 프로퍼티 지연 저장 프로퍼티 저장 프로퍼티 저장 프로퍼티는 단순히 값을 저장하고 있는 프로퍼티 입니다. let 키워드로 불변, var 키워드로 가변 프로퍼티를 만들 수 있습니다. struct Coordinate{ //불변 프로퍼티로 선언 후 변경 불가 let x: Int //가변 프로퍼티로 값 변경이 자유로움 var t: Int } var pointA = Coordinate(x: 0, y: 4) pointA.x = 2 //error 불변 프로퍼티..

    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("사과는 바나나보다 비쌉니다.") ..