2017년 10월 27일 금요일

Data Type : enum(열거형) @@ Swift4.0

enum(열거형)


열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입
열거형은 배열이나 딕셔너리 같은 타입과 다르게 프로그래머가 정의해준 항목 값 외에는 추가/ 수정이 불가능
* switch 구문과 함께 사용할때 유용하게 사용할 수 있습니다.


열거형을 사용하는 경우

 - 제한된 선택지를 주고 싶을때
 - 정해진 값 외에는 입력받고 싶지 않을때
 - 예상된 입력 값이 한정되어 있을때


기본선언

enum School{
    case primary
    case elementary
    case middle
    case high
    case college
    case university
    case graduate
}

또는 "," 를 이용해 한줄로 표현

enum School {
    case primary, elementary, middle, high, college, university, graduate
}


열거형 변수의 생성 및 값 변경

var types : School = School.primary

var typeName : School = .graduate

typename = .elementary


열거형의 원시 값(Raw Value) 지정과 사용

enum Schooltype : String{
    case primary = "유치원"
}

let schoolNameText = Schooltype.primary
print("저의 학교는 \(schoolNameText.rawValue) 입니다")   //   "저의 학교는 유치원 입니다." 


열거형의 원시 값 일부 지정 및 자동 처리
일부 항목만 원시 값을 적용 시 나머지 값은 스위프트에서 알아서 자동처리

enum Numbers : Int{
    case zero
    case one
    case two
    case ten = 10
}

print(Numbers.zero.rawValue)   // 0
print(Numbers.ten.rawValue)  //  10


열거형 초기화
원시 값 정보를 알 경우 원시 값을 통해 열거형 변수 또는 상수를 생성, 올바르지 않는 원시 값을 통해  생성하려고 하면 nil 반환

enum Numbers : Int{
    case zero
    case one
    case two
    case ten = 10
}

let newNumber = Numbers(rawValue : 0)  // zero
var noneNumber = Numbers(rawValue : 4)  //  nil


 연관 값

enum MainDish{
    case pasta(taste : String)
    case pizza(dough : String, topping : String)
}

var dinner : MainDish = MainDish.pasta(taste: "크림")  //  pasta("크림")
dinner = .pizza(dough: "치즈크러스트", topping: "불고기")   //  pizza(dough: "치즈크러스트", topping: "불고기")

*순환열거형

indirect 키워드 사용

- 특정 항목에 순환 열거형 항목 명시 
   case 키워드 앞에 
   enum AriExpression{
      case number (Int)
      indirect case add (AriExpression, AriExpression)
   }

- 열거형 전체에 순환 열거형 명시
   enum 키워드 앞에
  indirect enum AriExpression{
      case number (Int)
      case add (AriExpression, AriExpression)
    }




출처 : 야곰님의 스위프트 프로그래밍


2017년 10월 22일 일요일

Data Type : 세트(Set) @@ Swift 4.0

세트 (Set)


세트는 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입입니다.
세트 내의 값은 모두 유일한 값, 즉 중복된 값이 존재하지 않습니다.

*순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우에 사용

1. 세트의 선언과 생성

//  빈 세트의 생성
var emptySet : Set<String> = Set<String>()
var emptySet : Set<String> = []

// 대괄호를 이용해 초기화
var names : Set<String> = ["name1", "name2", "name3","name4"]

*Array에서 사용가능한 축약형(Array<Int>  -> [Int])이 Set에서는 불가능 사용 불가능 
 var names : String = ["name1", "name2", "name3","name4"]
 print(type(of: names))  // Array<String>

위 축약형을 사용할 경우 타입 추론에 의해 컴파일러는 Set 가 아닌 Array로 타입을 지정합니다.

2. 프로퍼티 

isEmpty  //  빈 값 체크 (Bool)
count  // 중복된 값은 허용하지 않아 카운팅 되지 않습니다.

3. 추가 및 삭제
// 추가
names.insert("name5")

// 삭제
names.rem("name5")


4. 세트의 활용 

- 집합 연산-

let englishClassStudent : Set<String> = ["john", "chulsoo", "yagom"]
let koreaClassStudent : Set<String> = ["jenny", "yagom", "chulsoo", "haha", "minsoo"]

<교집합>
let intersectSet : Set<String> = englishClassStudent.intersection(koreaClassStudent)
print(intersectSet)  //  ["yagom", "chulsoo"]

<여집합의 합>
let symmetricDiffSet : Set<String> = englishClassStudent.symmetricDifference(koreaClassStudent)
print(symmetricDiffSet)  //  ["john", "haha", "minsoo", "jenny"]

<합집합>
let unionSet : Set<String> = englishClassStudent.union(koreaClassStudent)
print(unionSet)  //   ["john", "yagom", "chulsoo", "haha", "minsoo", "jenny"]

<차집합>
let subtractSet : Set<String> = englishClassStudent.subtracting(koreaClassStudent)
print(subtractSet)  //  ["john"]


- 포함관계 연산 - 

print(새.isDisjoint(with: 포유류))   //  서로 베타적인지 - true

print(새.isSubset(of: 동물))   //  새가 동물의 부분집합 인가 - true

print(동물.isSuperset(of: 포유류))   //  동물은 포유류의 전체 집합인가 - true

print(동물.isSuperset(of: 새))  //  동물은 생의 전체 집합인가 - true


출처 : 야곰님의 스위프트 프로그래밍

2017년 10월 18일 수요일

Xcode 퀵헬프 사용 & 마크업 적용한 주석 사용

Xcode 에는 레퍼런스 문서의 요약된 내용을 보여주는 퀵헬프라는 기능이 있습니다.
코드작성중 레퍼런스 문서로 이동하지 않고 데이터타입이나 메서드 등의 간단한 정보를 확인할 수있는 아주 유용한 기능입니다.

<퀵헬프 보기>

원하는 항목(변수, 상수, 함수, 메서드, 타입 등등) 위에 마우스 커서를 놓고

option 키를 누른 상태로 클릭 or command + option + 2

통해 퀵헬프를 확인 가능합니다.


<마크업 형식에 따라 주석작성>

원하는 항목 (상수, 변수, 함수 등)에 마우스 커서를 위치한 후 

command + option + / 


ex)
enum HelloError : Error{
    case noName
    case unknown
}

HelloError 위에 마우스 커서를 위치 한 후 단축키를 누르면 (command + option + / )


/// <#Description#>
///
/// - noName: <#noName description#>
/// - unknown: <#unknown description#>
enum HelloError : Error{
    case noName
    case unknown
}

이렇게 마크업이 적용된 주석이 생성됩니다.

주석의 내용을 바꾸어 주고 퀵헬프 단축키를 누르면

/// 오류 타입의 열거형입니다.
/// - noName: 이름을 전달받지 못했을 때 발생하는 오류
/// - unknown: 알 수 없는 오류
enum HelloError : Error{
    case noName
    case unknown
}

원하는 항목 커서위치 > option 키를 누른 상태로 클릭 or command + option + 2




이렇게 퀵헬프 창에 나타납니다.


더 자세한 내용은 Markup Formatting Reference 를 참조하세요


출처 : 야곰님의 스위프트 프로그래밍


2017년 10월 17일 화요일

Data Type : Array (배열) @@ Swift 4.0

배열 (Array)

배열은 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션 타입입니다.

let 키워드 사용해 상수로 선언 시 변경할 수 없는 배열이 되고 var 키워드를 사용해 변수로 선언 시 변경 가능한 배열이 됩니다.


1. 배열의 선언과 생성


대괄호를 사용하여 배열 표현
var names : Array<String> = ["tester", "mary", "john"]

위와 동일한 배열  *[String]은 Array<String>의 축약 표현입니다.
var names : [String] = ["tester", "mary", "john"]

var namesArray : [Any]  = [Any]() //  Any 데이터를 요소로 갖는 빈 배열 생성
var namesArray : [Any]  = Array<Any> // 위 선언과 같은 동작 하는 코드

* 배열의 타입을 정확히 명시 했다면 [] 만으로 빈 배열 생성할 수 있습니다.
var emptyArray : [Any] = []
print(emptyArray.isEmpty)  // true

2. 배열의 사용


var names : Array<String> = ["tester", "mary", "john"]

1)  접근

print(names[2])   //   "john"
print(names[3])   //  에러 발생
print(names.index(of: "john"))  //   2
print(names.index(of: "me"))   // nil
print(names.first)  // "tester"
print(names.last)  //  "john"

2) 삽입

names.insert("tom", at:2)
print(names)  // ["tester", "mary", "tom", "john"]

names.insert(contentsOf : ["won"," ban"], at:4)
print(names)  //   ["tester", "mary", "tom", "john", "won", "ban"]

3) 제거

let firstItem:String = names.removeFirst()
let lastItem:String = names.removeLast()
let indexItem:String = names.remove(at: 1)

print(firstItem)  //  "tester"
print(lastItem)   //  "ban"
print(indexItem)  //  "tom"
print(names)  //   ["mary", "john", "won"]

4) 범위

print(names[0...1])  //  ["tester", "mary"]





출처 : 야곰님의 스위프트 프로그래밍






2017년 10월 16일 월요일

Swift 코드 테스트 할 수 있는 웹사이트 & 모바일

웹사이트


1. IBM Swift SandBox

https://swift.sandbox.bluemix.net/

 :  플레이그라운드와 유사한 모습으로 스위프트 코드 작성 및 실행 가능
    인기있는 스위프트 소스코드를 볼 수 있고 간단한 예제 소스 코드도 많음


2. 구름 IDE

https://ide.goorm.io/

 : 국내의 클라우드 통합 개발 환경, 컨테이너를 생성하여 가상 리눅스 환경에서 프로젝트 관리가 가능하며, 별도의 플러그인 등을 설치하지 않고도 온라인에서 직접 빌드 및 실행 가능
   리눅스 터미널 환경에서 스위프트 패키지 매니저를 사용할 수 있기 때문에 외부 라이브러리를 가져와서 프로젝트도 구현 할 수 있음.
   회원 가입을 하면 내프로젝트를 반영구적으로 저장,관리 할 수 있음
   스위프트 외에도 여러 프로그래밍 언어를 지원하며 Node.js, Spring, JSP, Arduino 등의 개발환경 제공
   클라우드 서버에서 바로 웹 서비스를 실행하여 운영 할 수도 있습니다.


모바일

iPad 용 플레이그라운드

앱스토어에서  Swift Playgrounds 검색 하여 설치

아이패드에서 스위프트 코드를 작성하고 테스트해볼 수 있는 어플리케이션




출처 : 야곰님의 스위프트 프로그래밍 책

2017년 10월 13일 금요일

switch문 @@ Swift4.0

switch 구문 기본

switch 입력 값 {
 case 비교 값 1 :
       실행 구문
 case 비교 값 2:
       실행 구문
       fallthrough  //  switch 구문의 case 를 연속 실행, fallthrough 사용 시 switch 구문을 탈출 하
                                   지 않고 아래 case로 넘어갑니다
 case 비교 값 3, 비교 값 4, 비교 값 5 :  //  한번에 여러 값을 비교할 수 있습니다.
       실행 구문
       break  //  break 키워드를 통해 종료 가능 -> 선택사항
 defult:  //  한정된 범위가 명확하지 않다면 default 는 필수 입니다.
       실행 구문
}

출처 : 야곰님의 스위프트 프로그래밍


추천 게시물

애플 개발자 등록방법 2016년 5월 8일 기준!!

애플 개발자 등록 절차 1. 개발자 등록 페이지 이동    애플 개발자 로그인 > Account 페이지 이동 > 하단 영역 클릭 (이미지 참조)   >> Enroll 클릭 >> 무조건 승인!! ...