일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- nohup
- PYTHON
- appium
- SWIFT
- 28015
- centos
- sshpass
- STF_PortForwarding
- STF
- Jupyter Notebook
- postgresql
- 실행권한
- postgres
- Jupyter
- nmap
- GoCD
- ftp
- rethinkdb
- ssh
- kitura
- port forwarding
- nGrinder
- openpyxl
- perfect
- Materials
- create table
- mysql
- insert
- ubuntu
- appium server
- Today
- Total
목록Swift/Basic (9)
don't stop believing
Reduce기능은 사실 결합이라고 불려야 마땅한 기능입니다. 리듀스는 컨테이너 내부의 콘텐츠를 하나로 합하는 기능을 실행하는 고차합수입니다. 배열이라면 배열의 모든 값을 전달인자로 전달받은 클로저의 연살 결과로 합해줍니다. Swift의 리듀스는 두 가지 형태로 구현되어 있습니다. 첫 번째 Reduce는 클로저가 각 요소를 전달받아 연산한 후 값을 다시 클로저 실행을 위해 반환하며 컨테이너를 순환하는 형태입니다.public func reduce(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> ResultinitialResult이라는 이름의 매개별수로 전달되는 값을 통해 초깃값을 지정해 줄..
Filter는 말 그대로 컨테이너 내부의 값을 걸러서 추출하는 역할을 하는 고차함수입니다. Map과 마찬가지로 새로운 컨테이너에 값을 담아 반환해 줍니다. 다만 Map처럼 기존 콘텐츠를 변형하는 것이 아니라, 특정 조건에 맞게 걸러내는 역할을 할 수 있는 점이 다릅니다. Filter 함수의 매개변수로 전달되는 함수의 반환 타입은 Bool입니다. 해당 콘텐츠의 값을 갖고 새로운 컨테이너에 포함될 항목이라고 판단하면 true를, 포함되지 않으려면 false를 반환해주면 됩니다. let numbers: [Int] = [0, 1, 2, 3, 4, 5] // 기본 closure 표현식 사용 let evenNumbers: [Int] = numbers.filter({ (number: Int) -> Bool in re..
Map은 자신을 호출할 때 매개별수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수입니다. Swift에서 Map은 Arry, Dictionary, Set, Optional 등에서 사용할 수 있습니다. 조금 더 정확히 말하자면 Swift의 Sequence, Collection 프로토콜을 따르는 타입과 옵셔널은 모두 맵을 사용할 수 있습니다. Map을 사용하면 컨테이너가 담고 있던 각각의 값을 매개변수를 통해 받은 함수에 적용한 후 다시 컨테이너에 포장하여 반환합니다. 기존 컨테이너의 값은 변경되지 않고 새로운 컨테이너가 생성되어 반환합니다. 그래서 Map은 기존 데이터를 변형하는 데 많이 사용 합니다. map 메써드의 사용법은 for-in 구문과 별반 차이가 없습니다. 다만 코드의 재사용 측면이나..
함수의 전달인자로 전달한 클로저가 함수 종료 후에 호출도리 때 클로저가 함수를 탈출(Escape)한다고 표현합니다. 클로저를 매개변수로 갖는 함수를 선언할 때 매개 변수 이름의 콜론(:) 뒤에 @escaping 키워드를 사용하여 클로저가 탈출하는 것을 허용한다고 명시해줄 수 있습니다. 예를 들어 비동기 작업을 실행하는 함수들은 클로저를 컴플리션 핸들러(Completion handler) 전달인자로 받아옵니다. 비동기 작업으로 함수가 종료되고 난 후 작업이 끝나고 호출할 필요가 있는 클로져를 사용해야 할 때 탈출 클로조(Escaping Closure)가 필요합니다. 클로저가 함수를 탈출할 수 이는 경우 중 하나는 함수 외부에 정의된 변수나 상수에 저장되어 함수가 종료된 후에 사용할 경우입니다. 예를 들어 ..
코드 블럭을 나가기 전에 꼭 실행해야 하는 코드는 defer로 처리할 수 있습니다.defer 구분은 코드가 블록을 어떤 식으로 빠져나가든 간에 꼭 실행해야 하는 마무리 작업을 할 수 있도록 도와 줍니다. 오류가 발생항 코드 블록을 빠져나가는 것이든, 정상적으로 코드가 블록을 빠져나가는 것이든 간에 defer 구문은 코드가 블록을 빠져 나가기 전에 무조건 실행되는 것을 보장합니다. 예를 즐어 함수 내에서 파일을 열어 사용하다가 오류가 발생하여 코드가 블록을 빠져나가더라도 파일을 정상적으로 닫아 메모리에서 해제해야 하기 때문에 defer 구문 내에는 파일을 닫는 코드를 작성해주어 정상적으로 파일이 메모리에서 해제될 수 있도록 해야 합니다. func writeData() { let file = openFile..
Gitbut 등에 올라온 예제 소스를 보다보면 class나 fun 앞에 public 또는 private 등으로 정의된 것을 볼 수 있습니다.접근 제어에 대해 간단히 알아 보겠습니다.https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html Access Control(접근제어) 코드끼리 상호작용을 할 때 파일 간 또는 모듈 간의 접근을 제한할 수 있는 기능을 말합니다. Access Control을 통해 코드의 상세 구현은 숨기고 허용된 기능만 사용하는 Interface를 제공할 수 있습니다. 객체지향 프로그래밍 페러다임에서 중요한 캡슐화(encapsu..
Swift로 command line tool을 만들거나 서버 프로그래밍을 할때 코드를 분리하고 싶을때가 있다.실행 부분과 로직 부분으로 구분하는 예제를 한번 만들어 봅시다. 먼저 적당한 곳에 프로젝트 폴더를 만듭니다. 저는 nGle002라고 만들었습니다. $ mkdir nGle002 $ cd nGle002 SMP로 프로젝트를 만들어 봅시다. $ swift package init --type executable package init을 하면 몇개의 파일과 폴더가 생성된다.Package.swift: package 및 dependencies 정의(지정)Source 폴더: 프로그래밍 소스가 위채해야 할 폴더이며 main.swift 파일이 존잼함. main.swift 파일은 프로그램의 인입점(entry point..
Command Line Tool을 좀더 있어보이게 만들어 봅시다.프로그램명 뒤에 옵션을 붙여서 실행시키는 static 모드와 대화형의 interactive 모드를 만들어 봅시다. 사용할 옵션은 -n, -p, -h 그리고 -q로 하겠습니다.-n: 이름을 등록하도록 합니다.-p: 전화번호를 등록하도록 합니다.-h: 사용 설명이 나오도록 합니다.-q: 인터렉션 모드에서 종료하도록 합니다. [swift command line tool 만들기 기본편]에서 이어서 진행하겠습니다. xCode에서 main.swift가 있는 경로에 swift 파일을 추가합니다. 이름은 ConsoleIO.swift로 하겠습니다.Class도 파일명과 동일하게 만들고 console에서의 input과 output을 담당하도록 합니다. impo..
swift로 command line tool을 만들어 보려고 합니다. 간단한 iOS 테스트앱은 만들어 봤으나 성능 테스트나 API 검증을 위한 툴을 만들어 보고 싶습니다. command line tool의 기본 구성까지만 만들어 보겠습니다. 먼저 Mac에서 swift 버전을 확인해 봅니다. Mac에서 Terminal을 열고 버전을 확인해 봅니다. 저는 아래처럼 3.1 버전으로 나오네요. $ swift --version Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42) Target: x86_64-apple-macosx10.9 프로젝트를 생성할 적당한 위치로 이동합니다. 저는 nGle001이란 폴더를 만들어 놨습니다. 편의상 폴더명은 프로젝트 이름으로..