import Swift


struct Sample {

    var mutableProperty: Int = 100 // 가변 프로퍼티

    let immutableProperty: Int = 100 // 불변 프로퍼티

    

    static var typeProperty: Int = 100 // 타입 프로퍼티

    

    // 인스턴스 메서드

    func instanceMethod() {

        print("instance method")

    }

    

    // 타입 메서드

    static func typeMethod() {

        print("type method")

    }

}


// 가변 인스턴스

var mutable: Sample = Sample()


mutable.mutableProperty = 200

// mutable.immutableProperty = 200


// 불변 인스턴스

let immutable: Sample = Sample()


// immutable.mutableProperty = 200

// imuutable.immutablePropery = 200


// 타입 프로퍼티 및 메서드

Sample.typeProperty = 300

Sample.typeMethod() // type property


// mutable.typeProperty = 400

// mutable.typeMethod()


struct Student {

    var name: String = "unknown"

    var `class`: String = "Swift"

    

    static func selfIntroduce() {

        print ("학생타입입니다")

    }

    

    func selfIntroduce() {

        print("저는 \(self.class)반 \(name)입니다")

    }

}


Student.selfIntroduce() // 저는 swift반 real_name입니다



var real_name: Student = Student()

real_name.name = "real_name"

real_name.class = "swift"

real_name.selfIntroduce()


let jina: Student = Student()

// 불변 인스턴스이므로 프로퍼티 값 변경 불가

// 컴파일 오류 발생

//jina.name = "jina"

jina.selfIntroduce()


'Swift > 기초&문법' 카테고리의 다른 글

스위프트 swift 열거형 enum  (0) 2018.08.21
스위프트 swift 클래스 class  (0) 2018.08.21
스위프트 swift 옵셔널 추출  (0) 2018.08.15
스위프트 swift 옵셔널  (0) 2018.08.14
스위프트 swift 반복문  (0) 2018.08.14

//: Playground - noun: a place where people can play


import Swift


// 옵셔널 추출 방법에는 optional binding 과 force unwrapping 이 있다.

// optional binding : nil 체크 + 안전한 값 추출


func printName(_ name: String) {

    print(name)

}


//var myName: String? = nil


// printName(myName)

// 전달되는 값의 타입이 다르기 때문에 컴파일 오류발생


var myName: String! = nil


if let name: String = myName {

    printName(name)

} else {

    print("myName == nil")

}


// name 상수는 if-let 구문 내에서만 사용가능합니다.

// 상수 사용범위를 벗어났기 때문에 컴파일 오류 발생

// printName(name)


var myName2: String? = "realName2"

var yourName: String? = nil

if let name = myName2, let friend = yourName {

    print("\(name) and \(friend)")

}// yourName 이 nil이기 때문에 실행되지 않는다.


yourName = "realYourName"


if let name = myName2, let friend = yourName {

    print("\(name) and \(friend)")

} // realName2 and realYourName



// Force Unwrapping 옵셔널의 값을 강제로 추출


func printName2(_ name: String){

    print(name)

}


var myName3: String? = "realName"


printName2(myName3!) // realName


myName3 = nil


// print(myName3!)

// 강제 추출시 값이 없으므로 런타임 오류 발생


var yourName3: String! = nil


// printName2(yourName3) //nil 값이 전달되기 때문에 런타임 오류 발생


// optional binding 방식을 추천한다.




'Swift > 기초&문법' 카테고리의 다른 글

스위프트 swift 클래스 class  (0) 2018.08.21
스위프트 swift 구조체  (0) 2018.08.20
스위프트 swift 옵셔널  (0) 2018.08.14
스위프트 swift 반복문  (0) 2018.08.14
스위프트 swift 조건문  (0) 2018.08.14

//: Playground - noun: a place where people can play


import Swift


// optional 값이 '있을 수도 , 없을 수도 있음'


let optionalConstant: Int? = nil


// optional이 아닌 곳에 nil을 할당하면 에러가 발생한다.

// let someConstant: Int = nil


// optional = enum + general


/*

enum Optional<Wrapped> : ExpressibleByNilLiteral {

    case none

    case some(Wrapped)

}

*/


let optionalValue: Optional<Int> = nil

let optionalValue2: Int? = nil


// Implicitly Unwrapped Optional

// 암시적 추출 옵셔널

var optionalValue3: Int! = 100


switch optionalValue3 {

case .none:

    print("This Optional variable is nil")

case .some(let value):

    print("Value is \(value)")

}// Value is 100





// 기존 변수처럼 사용 가능

optionalValue3 = optionalValue3 + 1


// nil 할당 가능

optionalValue3 = nil


// 잘못된 접근으로 인한 런타임 오류 발생

// optionalValue3 = optionalValue3 + 1



// ?로 사용하는 사례

var optionalValue4: Int? = 101


switch optionalValue4{

case .none:

    print("This Optional variable is nil")

case .some(let value):

    print("Value is \(value)")

} // Value is 101


// 기존 변수처럼 사용불가 - 옵셔널과 일반 값은 다른 타입이므로 연산불가 , 에러발생

// optionalValue4 = optionalValue4 + 1


// nil할당 가능

 optionalValue4 = nil







'Swift > 기초&문법' 카테고리의 다른 글

스위프트 swift 구조체  (0) 2018.08.20
스위프트 swift 옵셔널 추출  (0) 2018.08.15
스위프트 swift 반복문  (0) 2018.08.14
스위프트 swift 조건문  (0) 2018.08.14
스위프트 swift 함수 고급  (0) 2018.08.14

//: Playground - noun: a place where people can play


import Swift


var integers = [1,2,3]

let people = ["my_name": 10, "my_name2":15, "my_name3": 20 ]


for integer in integers {

    print(integer)

}


// Dictionary의 item은 key와 value로 구성된 튜플 타입입니다.

for (name,age) in people {

    print("\(name): \(age)")

}


while integers.count > 1 {

    integers.removeLast()

}



// 기존 언어의 do-while 구문과 형태/동작이 유사하다.

// repeate안에 실행문이 먼저 실행된 후에 조건이 만족할때까지 수행한다.

repeat{

    integers.removeLast()

}while integers.count > 0


'Swift > 기초&문법' 카테고리의 다른 글

스위프트 swift 옵셔널 추출  (0) 2018.08.15
스위프트 swift 옵셔널  (0) 2018.08.14
스위프트 swift 조건문  (0) 2018.08.14
스위프트 swift 함수 고급  (0) 2018.08.14
스위프트 swift 함수 기본  (0) 2018.08.14

//: Playground - noun: a place where people can play


import Swift


let someInteger = 100


if someInteger < 100 {

    print("100 미만")

} else if someInteger > 100{

    print("100 초과")

} else{

    print("100")

} //100


// 매우 한정적인 값(ex. enum의 case 등)이 비교값이 아닌 한 default 구문은 반드시 작성해야 한다.

switch someInteger{

case 0:

    print("zero")

case 1..<100:

    print("1~99")

case 100:

    print("100")

case 101...Int.max:

    print("over 100")

default:

    print("unknown")

} //100


// 정수 외의 대부분의 기본 타입을 사용할 수 있다.

switch "abc" {

case "a":

    print("a")

case "ab":

    print("ab")

case "abc":

    print("abc")

default:

    print("unknown")

} //abc


'Swift > 기초&문법' 카테고리의 다른 글

스위프트 swift 옵셔널 추출  (0) 2018.08.15
스위프트 swift 옵셔널  (0) 2018.08.14
스위프트 swift 반복문  (0) 2018.08.14
스위프트 swift 함수 고급  (0) 2018.08.14
스위프트 swift 함수 기본  (0) 2018.08.14

//: Playground - noun: a place where people can play


import UIKit

import Swift


func greeting(friend: String, me: String = "myname"){

    print("Hello \(friend)! I'm \(me)")

}


greeting(friend: "friend_name") // Hello friend_name! I'm myname

greeting(friend: "michel", me:"whoami") //Hello michel! I'm whoami



func greeting(to friend: String, from me: String){

    print("Hello \(friend)! I'am \(me)")

}


greeting(to: "friend_name2", from: "myname2") //Hello friend_name2! I'am myname2


//가변 매개변수


//전달 받을 값의 개수를 알기 어려울 때 사용할 수 있다.

// 가변 매개변수는 함수당 하나만 가질 수 있다. 맨 뒤에 위치하는 것이 좋다.


func sayHelloToFriends(me: String, friends: String...) -> String{

    return "Hello \(friends)! I'am \(me)!"

}


print(sayHelloToFriends(me: "myname", friends: "friend_name1", "friend_name2", "friend_name3"))

//Hello ["friend_name1", "friend_name2", "friend_name3"]! I'am myname!


print(sayHelloToFriends(me: "myname2"))

//Hello []! I'am myname2!


// 스위프트는 함수형 프로그래밍 패러다임을 포함하든 다중 패러다임 언어입니다.

// 스위프트의 함수는 일급객체이므로 변수, 상수 등에 저장이 가능하고

// 매개변수를 통해 전달할 수도 있습니다.


var someFunction:(String,String) -> Void = greeting(to:from:)


someFunction("friend_name","my_name") //Hello friend_name! I'am my_name



someFunction = greeting(friend:me:)

someFunction("friend_name2","my_name2") //Hello friend_name2! I'm my_name2


// 타입이 다른 함수는 할당할 수 없다. 가변 매개변수 이기 때문에

// someFuction = sayHelloToFriends(me: friends:)


func runAnother(function: (String, String)-> Void){

    function("a_name","b_name")

}


runAnother(function: greeting(friend:me:)) //Hello a_name! I'm b_name


runAnother(function: someFunction)//Hello a_name! I'm b_name



'Swift > 기초&문법' 카테고리의 다른 글

스위프트 swift 옵셔널 추출  (0) 2018.08.15
스위프트 swift 옵셔널  (0) 2018.08.14
스위프트 swift 반복문  (0) 2018.08.14
스위프트 swift 조건문  (0) 2018.08.14
스위프트 swift 함수 기본  (0) 2018.08.14

//: Playground - noun: a place where people can play


import UIKit

import Swift


//func 함수이름(매개변수1이름 : 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {

//  함수 구현부

//  return  반환값

//}


func sum(a: Int, b: Int) -> Int {

    return a + b

}


//반환값 없을 경우 Void

func printMyName(name: String) -> Void{

    print(name)

}


//반환값 아래와 같이 생략도 가능

func printYourName(name: String){

    print(name)

}



//매개변수가 없는 함수

func maximumIntegerValue() -> Int {

    return Int.max

}



//매개변수와 반환값이 없는 함수

func hello() -> Void {

    print("hello")

}


func bye() {print("bye")}


sum(a:3 , b:4)


hello()


printMyName(name: "what")


printYourName(name: "your name")


maximumIntegerValue()


hello()


bye()



'Swift > 기초&문법' 카테고리의 다른 글

스위프트 swift 옵셔널 추출  (0) 2018.08.15
스위프트 swift 옵셔널  (0) 2018.08.14
스위프트 swift 반복문  (0) 2018.08.14
스위프트 swift 조건문  (0) 2018.08.14
스위프트 swift 함수 고급  (0) 2018.08.14

+ Recent posts