[Swift] 1. 변수와 데이터 타입,Collection 타입.

도윤·2021년 7월 11일
0

Swift

목록 보기
1/21

var 과 let

let name: type = value
var name: type = value

값의 타입이 명확하다면 타입은 생략 가능!

let name = value
var name = value

let constant : String = "차후에 변경이 불가능한 상수 let"
var variable : String = "차후에 변경이 가능한 변수 var"

variable = "변수는 이렇게 차후에 다른 값 할당 가능"

// constant = "상수는 차후에 값을 변경할 수 없습니다" // 오류발생

let sum: Int
let inputA: Int = 100
let inputB: Int = 200

// 선언 후 첫 할당
sum = inputA + inputB

// sum = 1 // 그 이후에는 다시 값을 바꿀 수 없습니다, 오류발생

// 변수도 물론 차후에 할당하는 것이 가능합니다
var nickName: String

nickName = "yagom"

// 변수는 차후에 다시 다른 값을 할당해도 문제가 없지요
nickName = "야곰"

## 데이터 타입
let implicitInteger = 70
let implicitInteger = 70.0

데이터 타입 지정 없이 선언하면 컴파일러가 타입을 유추하여 Int형,Double형으로 파악

let explicitDouble: Double = 70

데이터 타입을 Double형으로 지정해서 70을 할당하여도 타입은 Double형

Any

var someAny : Any = 100
someAny = "어떤 타입도 수용 가능"
someAny = "90.5"

Any는 어떠한 타입으로 사용 가능.

타입 변경

let label = "The width is"
let width = 94
let widthLabel = label + String(width)

값을 절대 다른 유형으로 암시적으로 변화 불가.
바꾸기 위해선 위처럼 String으로 타입을 표시

마지막 줄 String 제거시 에러 발생.

문자열에 값 포함.

let widthLabel = label + String(width) 처럼 표현하는 것 이외에 ()으로 표현이 가능.

let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."

여러 문자열 표시

여러 줄을 표시하기 위해선 (""") 표시를 사용.

let quotation = """
i said "I have \(apples) apples."
And then i said "I have \(apples + oranges)
	pieces of fruit."""

Collection Type

Array

빈 Int Array 생성

var integers : Array<Int> = Array<Int>() // []
integers.append(1) 						//[1]
integers.append(100)					//[1,100]

integers.contains(100)					//true
integers.contains(99)					//false

integers.remove(at:0)	//index가 0인 값을 제거하고 return 1
integers.removeLast()					//100
integers.removeAll()	//모든 값들을 제거  []

integers.count							//배열의 길이 return 0

//배열을 포현하는 다른 방법
var doubles:Arrays<Double> = [Double]()

var String : [String] = [String]()
var characters : [Character] = []

//let을 사용하여 불변한 Arrays append,remove 같은 함수 사용 불가.
let immutableArray = [1,2,3]

Dictionary

Key가 String 타입이고 Value가 Any인 빈 Dictionary 생성

var anyDictionary : Dictionary<String,Any> = [String:Any]()
anyDictionary["someKey"] = "value" // return "value"
anyDictionary["anotherKey"] = 100 // return 100

anyDictionary		//	["someKey : "value","anotherKey":100]
anyDictionary["someKey"] = "dictionary" // return "dictionary"
anyDictionary		// ["someKey : "dictionary","anotherKey":100]

anyDictionary.removeValue(forkey:"another") // 해당하는 key set remove.
anyDictionary["someKey"] = nil // somekey에 해당하는 set 제거.

anyDictionary// [:]
let emptyDictionary : [String:String] = [:]
let initalizeDictionary : [String:String] = ["name":"doyun","gender":"male"]

emptyDictionary["key"] = "value" // let이므로 에러 발생.

let someValue : String = initalizeDictionary["name"] // 에러 발생 optional 에서 확인.

Set

빈 Int Set 생성


var integerSet : Set[Int] = Set<Int>()
integerSet.insert(1) // return inserted true, memberAfterInsert(1)
integerSet.insert(100)  // return inserted true, memberAfterInsert(1)
integerSet.insert(99)  // return inserted true, memberAfterInsert(1)
integerSet.insert(99)  // return inserted false, memberAfterInsert(1)
integerSet.insert(99)  // return inserted false, memberAfterInsert(1)

set은 중복된 값을 갖지 않으므로 중복된 값이 insert 호출 되었을 때 false값을 return 한다.

integerSet
integerSet.contains(1)		// true 
integerSet.contains(2)		// false

contains 메소드는 Set에 원소를 가지고 있는지 확인.

integerSet.remove(100)				//100
integerSet.removeFirst()			//99

integerSet.count				//1

remove 메소드는 제거, count는 Set의 크기.

let setA: Set = [1, 2, 3, 4, 5]
let setB: Set = [3, 4, 5, 6, 7]

// 합집합
let union: Set = setA.union(setB)
print(union) // [2, 4, 5, 6, 7, 3, 1]

// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]

// 교집합
let intersection: Set = setA.intersection(setB)
print(intersection) // [5, 3, 4]

// 차집합
let subtracting: Set = setA.subtracting(setB)
print(subtracting) // [2, 1]

0개의 댓글