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 는 필수 입니다.
       실행 구문
}

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


2017년 9월 21일 목요일

Application Loader로 앱 업로드 (use Application Loader) @@ in Swift4.0 - Xcode9.0 iOS11

이번 업데이트로 앱을 업로드할 때 원인모를 오류들이 발생하여 Application Loader을
이용해 앱을 업로드했습니다.
매번 업데이트 때마다 문제가 생기니 이 방법에 익숙해지는 것이 좋을듯하여 정리하였습니다.


1. Application Loader 실행

Xcode의 메뉴중에 Open Developer Tool >  Application Loader 을 실행 시킵니다.



실행하면 아래 이미지처럼 나타납니다. 참고로 전 버전에선 "앱 전송" 말고도 "인앱구매" 라는 항목이 있었는데 사라졌네요




일단 Application Loader(어플리케이션 로더) 통해 앱을 전송해서 올리려면 ipa파일이 필요합니다.



2. ipa 파일 생성

ipa 파일 생성 방법은 앱스토어에 앱 업로드 시 사용하는 방법과 같습니다. 
Xcode > Product > Archive 를 실행합니다.

* Archive 가 활성화가 되어있지 않는 상태라면 핸드폰을 연결하여 빌드하고 다시 메뉴를 열어보시면 Archive 가 활성화 됩니다.




아래 화면으로 넘어갔다면 Upload to App Store.. 가 아닌 Export 를 눌러줍니다.


App Store 에 등록한것처럼 몇 가지 선택항목 체크 후 폴더 경로를 정해주면 해당 경로로
ipa 파일이 생성됩니다.



3. Application Loader를 이용한 앱 업로드

이제 처음에 실행했던 Application Loader 에서 선택버튼을 누른뒤 ipa 파일을 선택해주면 업로드가 됩니다.


추천 게시물

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

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