알고리즘

스위프트(Swift) 기본 문법 

이온시옥 2018. 12. 8. 21:07
반응형

////////////////////////////////////////////

//변수 & 상수

////////////////////////////////////////////

//var & let을 사용하여 변수, 상수 지정함. 타입은 자동으로 저장되는 값에서 지정이됨.

var variable = 100 //변수선언 키워드 var

let literal = 100 //상수선언 키워드 let

var str = "Hello, playground"

var num = Int() //빈 int 선언. //비어있는 변수를 저장하려면 무조건 :콜론을 사용하여 형을 선택해줘여함

var numm:Int //빈 int 선언.

//Int, Double, Float, Bool, String 등등 타입을 지정해주면됨.


num = 50

numm = 100


var array = [1,2,3,4,5]

array[0]

array[1]

array[2]



////////////////////////////////////////////

//조건문

////////////////////////////////////////////

    import Foundation

    Date() //Foundation 모듈안에 들어있는 Date클래스


    let date = Date();

    let current = Calendar.current

    let hour = current.component(.hour, from: date); //date 변수의 hour를 추출

    let month = current.component(.month, from: date);


    if hour < 12 {

        print("오전입니다.")

    }

    else {

        print("오후입니다.")

    }


//Switch

let weekDay = current.component(.weekday, from: date)


switch weekDay {

case 1:

    print("일요일입니다.")

    break //break 생략가능

case 2:

    print("월요일입니다.")

case 3:

    print("화요일입니다.")

case 4:

    print("수요일입니다.")

case 5:

    print("목요일입니다.")

case 6:

    print("금요일입니다.")

case 7:

    print("토요일입니다.")

default: //default는 무조건 써야함.

    print("아무날도아닙니다..")

}


switch weekDay {

case 1,7:

    print("주말입니다.")

case 2,3,4,5,6:

    print("평일입니다. ")

default:

    print("아무날도아닙니다.")

}



////////////////////////////////////////////

//반복문

////////////////////////////////////////////

//while은 조건에 집착할떄

//for는 횟수에 집착할때 많이 사용.

var i = 0

while i < 100 {

    print("hello!!!")

    i = i + 1

}


for i in 1...10 { //...은 endnum도 포함함.

    print("\(i)번째입니다!!") //1~10 출력

}


for i in 1..<10 { //..<은 endum을 포함하지않음.

    print("\(i)번째입니다!!") //1~9 출력

}



////////////////////////////////////////////

//배열

////////////////////////////////////////////

var intArray = [1,1,2,3,5,8,13]

var stringArray = ["가", "나", "다", "라", "마"]


//빈 배열 생성방법 두가지

var arrayA:[String] = []

var arrayB = [Int]()


//배열의 length

intArray.count //count 메소드 사용


//반복문을 사용한 배열접근

for i in 0..<intArray.count {

    print(intArray[i])

}

for i in (0..<intArray.count).reversed() { //반복문 역순

    print(intArray[i])

}

for element in stringArray { //배열을 더욱 편하게 반복 접근하는 "for element in array" 구문

    print (element)

}


//배열의 다양한 메소드

intArray.insert(10, at: 0) //0번째 위치에 10을 저장.


intArray.sort()

intArray.sort(by: >) //내림차순 정렬 return void (파괴적 메소드, 자기자신(배열값)을 바꿈.)

intArray.sort(by: <) //오름차순 정렬


var temp =

    intArray.sorted(by: >) //내림차순 정렬된 배열을 리턴하여 temp에 저장. (비파괴적 메소드, 자기자신을 바꾸지 않음.)

intArray //위에 sorted로 정렬을 했지만, 오른쪽의 결과와 같이 intArray의 정렬은 바뀌지 않았음.


intArray.remove(at: 0) //0번째 element를 배열에서 삭제, 또한 삭제한 element를 리턴함.

intArray.removeAll() //배열전체 삭제



////////////////////////////////////////////

// 딕셔너리

////////////////////////////////////////////

var dictionary = [

    "임언석" : "010-9073-0000",

    "홍길동" : "111-1111-1111"

]

dictionary["임언석"] //딕셔너리 element 접근

dictionary["홍길동"]


var dictionaryA:[String:Int] = [:] //빈 딕셔너리 만들기

var dictionaryB = [String:String]() //빈 딕셔너리 만드는 다른 방법


dictionaryA["사과"] = 100 //사과 key를 추가하고 값을 100으로 저장

dictionaryA["배"] = 200

dictionaryA["바나나"] = 100


for (key, element) in dictionaryA { //딕셔너리를 편하게 반복접근

    key

    element

    print("\(key) is \(element) ")

} //주의 사항: 딕셔너리의 반복문은 순서가 랜덤이다!! (인덱스순으로 저장되지않고 성능에 따라 랜덤순으로 저장됨)


dictionaryA.removeValue(forKey: "사과") // 사과 지우기.



////////////////////////////////////////////

// 튜플

////////////////////////////////////////////

var tupleA = ("가", 10, "구름", true) //자료형이 썪일 수 있음

tupleA.0

tupleA.1

tupleA.2

tupleA.3


var tupleB = (

    postcode: 10000,

    address: "서울특별시 강남구"

)

tupleB.postcode

tupleB.address

tupleB.0

tupleB.1

//스위프트의 튜블은 변수로 사용가능 (값을 바꿀 수 있음)


var (aa,bb,cc) = (10,20,30)

aa

bb

cc

//변수나 상수를 선언할때, 한번에 여러개를 선언할 수 있음.


let tupleC = (1,2,3,4)

let (a,b,c,d) = tupleC //tupleC의 값 모두를 a,b,c,d에 저장

let (_,f,g,_) = tupleC //tupleC의 1,2element의 값만 f,g에 저장. 0,4의 값은 저장안함.



////////////////////////////////////////////

//함수

////////////////////////////////////////////

func showHello() {

    print("Hello world!!!")

}


func printPerson(name: String, address: String) {

    print("안녕하세요")

    print("저의 이름은 \(name)입니다.")

    print("저의 집은 \(address)에 있습니다.")

}

printPerson(name: "이온시옥", address: "서울특별시 관악구")

printPerson(name: "홍길동", address: "강원도 철원")


func calcBMI(name: String, height: Double, weight: Double) -> Double {

    let heightM = height/100.0

    let bmi:Double = weight / (heightM * heightM);

    return bmi

}


let myBMI = calcBMI(name: "임언석", height: 178, weight: 75)



////////////////////////////////////////////

//옵셔널 자료형

////////////////////////////////////////////

var aaa:Int = 273

//aaa = nil  //기본적으로 nil을 넣을 수 없음!!


var bbb:Int? = Int(53) //bbb == 53

var ccc:Int? = Int("안녕하세요") //ccc == nil

//자료형 뒤에 ?를 붙으면 옵셔널 자료형, ?를 붙이는 것을 "랩"이라고 함.

//옵셔널 자료형(?로 할당된 자료형)에 !를 붙이게되면 일반형으로 변환이 됨


var ddd = bbb! //!를 붙이는 것을 "강제 언래핑"


//강제 언래핑과 묵시저

var dic = [

    "A" : "value A",

    "B" : "value B",

    "C" : "value C"

]

let dicElementA = dic["A"] //A 키의 value를 저장

dic["asdasdasdasd"] //딕셔너리에 없는 키면 nil을 출력


//강제적인 방법

dic["A"]! + dic["B"]! //딕셔니리의 값을 더하기위해서는 !(강제 언래핑 == 암묵적인 언램)


//if let을 사용한 부드러운? 방법

if let keyA = dic["A"], let keyB = dic["B"] { //if let을 사용한 정말로 nil이 아닌지 확인하고 사용하는 방법

    //또한 쉼표를 연결해서 조건문 한번만 사용할 수 있음!!

    keyA + keyB

}



////////////////////////////////////////////

//클래스

////////////////////////////////////////////

//클래스 == 속성(데이터) + 메서드(기능)

//학생 클래스 생성.

class Student {

    //속성(데이터)

    private var math:Int = 0;

    private var english:Int = 0;

    private var science:Int = 0;

    private var korean:Int = 0;

    //생성자 (init)

    init(math:Int, english:Int, science:Int, korean:Int) {

        self.math = math

        self.english = english

        self.science = science

        self.korean = korean

    }

    //메서드(기능)

    func getAverage() -> Double {

        return Double(math + english + science + korean) / 4;

    }

    //private & require & public func & variable

}


var student = Student(math: 99, english: 90, science: 80, korean:88) //생성자로 파라미터를 넘김.

let agverage = student.getAverage();//stduent 인스턴스의 getAverage 메소드 실행.


/*다른 프로그래밍과 다른점

 1. this가 아닌 math

 2. 생성자를 사용할 때는 init() {}

 3. 객체를 생성할때 new를 사용하지 않음!!

 */

import UIKit


let mySwitch = UISwitch() //스위치 생성.


mySwitch.isOn = true //스위치를 켬.

mySwitch.onTintColor = UIColor.brown //틴트색상을 브라운으로 설정.


////////////////////////////////////////////

// 디자인

////////////////////////////////////////////

import UIKit //UIKit 레이블, 버튼, 스위치, 슬라이드, 텍스트뷰 등등 아이폰의 UI요소들이 모두 모여있는 키트


//동적으로 UI요소 생성하기 (정적으로 생성하려면 스토리보드사용!)

let label = UILabel(frame: CGRect(x:16, y:20, width: 300, height:24))


label.text = "Hello World!!!"


label.textAlignment = NSTextAlignment.center //중앙에 배치

label.textAlignment = .right //오론쪽에 배치, (오브젝트 생략)

label.textAlignment = .center //중앙에 배치, (오브젝트 생략)

label.textColor = UIColor.blue



반응형