Swift 컬렉션타입과 Xcode 사용법

  • 이번 글에서는 스위프트 언어의 IDE인 Xcode 사용법을 간단히 알아보고,
  • 스위프트의 콜렉션 타입에 대해서 알아보겠다.
  • 시작하기전에, 지난 글에서 다룬 반복문의 더 많은 예제를 살펴보도록하자.

더 많은 스위프트 반복문 예제

// 윤년 구하는 문제
    
func check(leapYear:Int) -> String
{
    if leapYear % 4 == 0
    {
        if leapYear % 100 == 0
        {
            if leapYear % 400 == 0
            {
                return "\(leapYear)년은 윤년입니다."
            } else
            {
                return "\(leapYear)년은 윤년이 아닙니다."
            }
        } else
        {
            return "\(leapYear)년은 윤년입니다."
        }
    } else
    {
        return "\(leapYear)년은 윤년이 아닙니다."
    }
}
    
print(check(leapYear: 400))
    
    
    
// 각 자리수 더하는 함수
    
func addAllDigit(num:Int) -> Int
{
    var returnValue:Int = 0
    var doubleNum:Int = num
    
    while doubleNum > 0
    {
        returnValue = returnValue + (doubleNum % 10)
        doubleNum = doubleNum / 10
    }
    
    return returnValue
}
    
print(addAllDigit(num: 5792))
    
    
    
// 숫자 리버스 함수
    
func reverse(num:Int) -> Int
{
    var returnValue:Int = 0
    var doubleNum:Int = num
    
    while doubleNum > 0
    {
        returnValue = returnValue * 10
        returnValue = returnValue + doubleNum % 10
        doubleNum = doubleNum / 10
    }
    
    return returnValue
}
    
print(reverse(num: 1234))
    
    
    
// 별 그리기
    
func drawStar(line:Int)
{
    var value:String = ""
    
    for index in 1...line
    {
        for _ in index..<line
        {
            value = value + " "
        }
        
        for _ in 1...(index * 2 - 1)
        {
            value = value + "*"
        }
        
        print(value)
        value = ""
    }
}
    
drawStar(line: 5)

Xcode 간단한 사용법

  • 애플 개발자 사이트 또는 맥 앱스토어에서 Xcode 설치를 진행하고, 실행한다.
  • 그러면 다음과 같은 화면이 나타난다.
  • 새로운 프로젝트 생성을 위해 'Create a new Xcode project'를 선택한다.
  • 앱을 만들기 위한 템플릿 설정이 나온다.
  • 우선, 가장 간단한 'Single View Application'을 선택해본다.
  • 그러면 다음과 같이 템플릿이 설정되고 프로젝트에 대한 정보를 입력하는 창이 나타난다.
  • 'Product Name'에는 임의로 원하는 이름을 입력한다.
  • 나머지 옵션도 일단 테스트를 위한 프로젝트인만큼 원하는대로 설정한다.
  • 단, Language는 반드시 Swift로 설정하고 Next를 눌러 다음으로 넘어가면,
  • 저장 위치를 설정하는 화면이 나타난다.
  • 여기서는 'Create Git repository on' 옵션해제 하는것만 주의하면 된다.
  • 나중에 깃이라는 시스템을 활용할때만 필요한 옵션이기 때문이다.
  • 개발할 수 있는 화면이 나타난다.
  • 작업 환경은 크게 윗네부분을 '툴바', 왼쪽 부분을 '네비게이터',
  • 가운데 메인 부분을 '에디터', 오른쪽 부분을 '유틸리티',
  • 가운데 부분을 '디버그 공간'이라고 한다.

xcode-basic-collection-type

  • Xcode는 대략적으로 이렇게 생겼다.
  • 이번 글에서는 Xcode에 대해 이쯤만 알아두고,
  • 실제로 어플을 만들어야 할 때 본격적으로 알아보도록 하겠다.

스위프트 콜렉션 타입

  • 스위프트 콜렉션 타입에는 3가지 종류가 있다.
  • '배열', '집합', '사전'이 그 주인공이다.
  • 각 콜렉션 타입의 대략적인 구도는 다음 사진과 같다.

xcode-basic-collection-type

스위프트 배열

  • 하나씩 자세히 알아보겠다.
  • 배열은 인덱스와 그에에 대응하는 데이터로 이뤄진 자료 구조를 의미한다.
  • 배열의 기본 문법은 다음과 같다.
var someInts:Array<Int> = Array<Int>()
  • 하지만 배열을 나타낼때 기본 문법을 축약해서도 나타낼수 있고, 이를 더 많이 사용한다.
  • 축약 문법은 다음과 같다.
var someInts:[Int] = [Int]()
  • 배열 리터럴 문법은 대괄호를 사용하고, 다음과 같이 사용할 수 있다.
var someInts:[Int] = [1,2,3,4]
  • 한편, 배열의 인덱스는 0부터 시작하고, 인덱스를 통해 배열의 값을 가져올 수 있다.
var someInts:[Int] = [1,2,3,4] 

print("\(someInts[0])")
//1이 출력됩니다.

스위프트 집합

  • 스위프트 집합은 같은 타입의 데이터가 순서 없이 모여있는 자료구조이다.
  • 집합의 문법은 다음과 같다.
var someInts:Set<Int> = Set<Int>()
  • 집합은 배열과 달리 축약 문법이 없고, 배열과 같은 리터럴 문법을 사용한다.
var someInts:Set<Int> = [1,2,3,4]
  • 집합에는 연산이 있다는 장점이 있다.
  • 다음과 같은 연산을 할 수 있습니다.

xcode-basic-collection-type

  • 집합 Set 연산의 사용 예시는 다음과 같다.
var oddDigits : Set = [ 1, 3, 5, 7, 9 ] 
let evenDigits : Set = [2, 4, 6, 8] 
let primeDigits : Set = [2, 3, 5, 7] 
    
oddDigits.intersection(evenDigits) 
oddDigits.symmetricDifference(primeDigits)

스위프트 딕셔너리

  • 스위프트 딕셔너리 순서가 정해져 있지 않은 데이터에,
  • 키 값을 통해 구분할 수 있는 자료구조이다.
  • Dictionary의 문법은 다음과 같다.
var someInts:Dictionary<String,Int> = [String:Int]()
  • Dictionary의 축약 문법은 다음과 같다.
var someInts:[String:Int] = [String:Int]()
  • Dictionary의 리터럴 문법은 다음과 같다.
var airports: [String:String] = ["ICH": "인천공항", "CJU": "제주공항"]
  • Dictionary의 데이터는 키 값을 통해 불러올 수 있다.
var airports: [String:String] = ["ICH": "인천공항"]

print("\(airports["ICH"])")
//인천공항 을 출력.

여태까지 개념을 이용한 스위프트 예제

// 요일 구하기    

func getWeekDay(atMonth: Int, day: Int) -> String
{
    var week: [String] = ["Sat", "Sun", "Mon", "Tues", "Wed", "Thur", "Fri"]
    var value: Int = 0
    
    if atMonth == 1
    {
        value = day
    } else if atMonth == 2
    {
        value = 31 + day
    } else if atMonth == 3
    {
        value = 59 + day
    } else if atMonth == 4
    {
        value = 90 + day
    } else if atMonth == 5
    {
        value = 120 + day
    } else if atMonth == 6
    {
        value = 151 + day
    } else if atMonth == 7
    {
        value = 181 + day
    } else if atMonth == 8
    {
        value = 212 + day
    } else if atMonth == 9
    {
        value = 243 + day
    } else if atMonth == 10
    {
        value = 273 + day
    } else if atMonth == 11
    {
        value = 304 + day
    } else if atMonth == 12
    {
        value = 334 + day
    }
    
    return week[value % 7]
}
    
print(getWeekDay(atMonth: 9, day: 7))
    
    
    
// 중복 숫자 줄이기
    
func shoter(num: Int) -> String
{
    var num = num
    var list: [Int] = []
    var value: String = ""
    var count: Int = 0
    
    while num > 0
    {
        list.append(num % 10)
        num = num / 10
        count = count + 1
    }
    
    for index in 0..<(count - 1)
    {
        if index == count - 2
        {
            value = String(list[index]) + value
        } else if list[index] == list[index + 1]
        {
           
        } else
        {
            value = String(list[index]) + value
        }
    }
    
    return value
}
    
print(shoter(num: 112233355))
    
    
    
// 소수 찾기
    
func allPrimeNumber(endNum: Int) -> Array<Int>
{
    var list: [Int] = []
    var num: Int = 2
    var index: Int = 0
    var comp: Int = 1
    
    for _ in 0...(endNum - 2)
    {
        list.append(num)
        num = num + 1
    }
    
    while index < list.count
    {
        while comp < list.count
        {
            if list[comp] % list[index] == 0
            {
                list.remove(at: comp)
            } else
            {
                comp = comp + 1
            }
        }
        
        index = index + 1
        comp = index + 1
    }
    
    return list
}
    
print(allPrimeNumber(endNum: 30))
    
    
    
// 시저 암호
    
func ceasar(data: Array<String>, keyNum: Int) -> Array<String>
{
    var list: [String] = []
    var alphabet: [String] = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
    var Alphabet: [String] = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
    
    for num in 0..<data.count
    {
        for index in 0..<alphabet.count
        {
            var index = index
            if data[num] == alphabet[index]
            {
                if (index + keyNum) > 25
                {
                    index = index - 26
                    list.append(alphabet[index + keyNum])
                } else
                {
                    list.append(alphabet[index + keyNum])
                }
            }else if data[num] == Alphabet[index]
            {
                if (index + keyNum) > 25
                {
                    index = index - 26
                    list.append(Alphabet[index + keyNum])
                } else
                {
                    list.append(Alphabet[index + keyNum])
                }
            }
        }
    }
    
    return list
}
    
print(ceasar(data: ["a","D","x"], keyNum: 3))

관련 글