일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- Flutter
- 개발자
- Wil
- ListTile
- Xcode
- URLSession
- Storyboard Reference
- 메모장만들기
- 날짜처리
- 앱개발
- 계산기만들기
- Storyboard
- 오토레이아웃
- 내일배움캠프
- UISlider
- ios
- pull down button
- userdefaults
- 스파르타코딩클럽
- Swift
- 내배캠
- strikeThrough
- 코드스니펫
- DART
- attributedText
- todolist
- pop up button
- 플러터
- 커맨드라인툴
- Today
- Total
이리메라 갖다가
Swift 기초문법(1) - 상수/변수, 데이터타입, 컬렉션타입, 함수 본문
상수와 변수
상수(Constant)
변할 수 없는 값을 의미하며 let으로 선언한다. 초기 선언 시 타입만 지정한 후 나중에 값을 지정할 수 있다.
let 상수:String = "값"
print(상수)
// 값
변수(Variable)
변할 수 있는 값을 의미하며, 언제든 값을 바꿀 수 있다. 상수와 동일하게 타입만 지정한 후 나중에 값을 지정할 수 있다.
var 변수:Int = 0
print(변수)
// 0
기본 데이터 타입
부울(Booleans)
참(true)과 거짓(false)으로 나타내며, 논리적인 결과를 도출할 때 사용된다.
var someBool: Bool = true
print(someBool)
// true
정수형(Integers)
정수형 타입이며 Int로 타입을 지정할 수 있다.
*양의 정수형의 경우 UInt로 지정할 수 있으며 음수 값을 지정할 수 없다.
var someInt: Int = -10
print(someInt)
// -10
//양의 정수형(UInt)
var someUInt: Int = 10
print(someUInt)
// 10
부동소수형(Floating-point numbers)
Float 타입(32bit 부동소수점 표기)과 Double 타입(64bit 부동소수점 표기)이 있다.
//Float
var someFloat: Float = 3.14
print(someFloat) // 3.14
//Double
var someDouble: Double = 3.14
print(someDouble) // 3.14
한글자 문자형(Characters)
character 타입에 문자형(String)을 대입하면 에러가 발생한다.
var someCharacter: Character = "🥲"
print(someCharacter)
// 🥲
someCharacter = "하하하" >> 에러발생
문자열(String)
문자의 연속을 말한다.
var someString: String = "하하하🥲"
print(someString)
// 하하하🥲
** 모든 데이터 타입은 선언된 타입으로만 사용가능하며, A타입으로 선언된 상수를 B타입으로 대입할 수 없다.
Any, AnyObject, nil
Any
Swift의 모든 타입을 지칭하는 키워드이다.
var someAny: Any = 100
someAny = "모든 타입 수용 가능"
print(someAny)
// 모든 타입 수용 가능
someAny = 123.3
print(someAny)
//123.3
AnyObject
모든 클래스 타입을 지칭하는 프로토콜이다. (일단은 그렇구나~ 알고만 있으면 된다.)
class SomeClass {}
var someAnyObject: AnyObject = SomeClass()
nil
없음을 의미하는 키워드이다.
아래 변수는 위에서 Any와 AnyObject 타입으로 선언되었기 때문에 변수라도 nil 값으로 변경할 수 없다.
someAny = nil
// 에러 발생: Any 타입으로 선언되었기 때문에 없는 값을 받을수 없다.
someAnyObject = nil
// 에러 발생: AnyClass 타입으로 선언되었기 때문에 없는 값을 받을수 없다.
컬렉션 타입
배열(Array)
순서가 있는 리스트 컬렉션을 말한다. Array는 아래와 같은 메서드 등이 있어 사용하기 용이하다.
//인스턴스 생성
var integers: Array<Int> = Array<Int>()
/* array 메서드 */
// 추가
integers.append(1) // [1]
integers.append(100) // [1, 100]
// 포함여부 확인
integers.contains(1) // true
// 삭제
integers.remove(at: 0) //(at: 인덱스) 1
integers.removeLast() //마지막 인덱스 삭제 100
integers.removeAll() //모든 인덱스 삭제 []
// 갯수 확인
integers.count // 0
//Array 생성
var doubles: Array<Double> = [Double]()
var strings: [String] = [String]()
var characters: [Character] = []
let immutableArray = [1, 2, 3]
// 상수로 선언되었기 때문에 추가나 삭제같은 메서드를 사용할 수 없다.
딕셔너리(Dictionary)
key와 value의 쌍으로 이루어진 컬렉션 타입이다. 변경, 삭제 등 사용 가능한 메서드들이 존재한다.
** 마지막 에러의 경우 옵셔널에 대해 공부하게 되면 이해할 수 있다.
var anyDictionary: Dictionary<String, Any> = [String:Any]()
// key가 String 타입이고 value가 Any 타입인 빈 딕셔너리 인스턴스 생성
anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100
anyDictionary
// ["someKey":"value", "anotherKey":100]
// 변경
anyDictionary["someKey"] = "dictionary"
anyDictionary
// ["someKey":"dictionary", "anotherKey":100]
// 삭제
anyDictionary.removeValue(forKey: "someKey")
// ["anotherKey":100]
anyDictionary["anotherKey"] = nil
// []
let emptyDictionary: [String:String] = [:]
let initalizedDictionary: [String:String] = ["name":"Minjee", "gender":"female"]
let someValue: String = initalizedDictionary["name"]
// 에러 발생 : name 값이 있을 수도 있고 없을 수도 있는 불확실성 때문
집합(Set)
순서가 없고 멤버가 유일한 컬렉션 타입으로 수학의 집합 개념과 동일하다.
var integerSet: Set<Int> = Set<Int>()
//축약 문법이 없음
/* Set 메서드 */
// 삽입(추가) - Set는 순서가 없기 때문에 앞으로 추가될 지, 뒤로 추가될지 모름
integerSet.insert(1)
// {1}
integerSet.insert(2)
// {1,2}
integerSet.insert(2)
// {1,2}
integerSet
// {1,2} 집합의 개념이기 때문에 중복값을 인정하지 않음
// 포함 여부
integerSet.contains(1)
// 삭제
integerSet.remove(1)
integerSet.removeFirst()
// 갯수 확인
integerSet.count
// setA, setB 인스턴스 생성
let setA: Set<Int> = [1,2,3,4,5]
let setB: Set<Int> = [3,4,5,6,7]
// 합집합
let union: Set<Int> = setA.union(setB)
// {1,2,3,4,5,6,7}
// 정렬(기본은 오름차순)
let sortedUnion: [Int] = union.sorted()
// [1,2,3,4,5,6,7]
// 교집합
let intersection: Set<Int> = setA.intersection(setB)
//{3,4,5}
// 차집합(setA-setB)
let subtracting: Set<Int> = setA.subtracting(setB)
// {1,2}
함수
함수(Functions)
함수선언의 기본 형태는 다음과 같다.
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
함수 구현부
return 반환값
}
매개변수의 합을 구하는 함수는 아래와 같이 작성할 수 있다.
func sum(a: Int, b: Int) -> Int {
return a + b
}
- 반환 값이 없는 함수
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> Void {
함수 구현부
return
}
func printMyName(name: String) -> Void {
print(name)
}
- 매개변수가 없는 함수
func 함수이름() -> 반환타입{
함수 구현부
return
}
func maximumIntegerValue() -> Int {
return Int.max
}
- 매개변수와 반환타입이 둘 다 없는 함수
func 함수이름() -> Void {
함수 구현부
return
}
func hello() -> Void { print("hello") }
func bye() { print("bye") }
- 함수의 호출
sum(a: 3, b: 5)
// 8
printMyName(name: "Hoyeon")
//Hoyeon
maximumIntegerValue()
hello()
//hello
bye()
//bye
매개변수 기본값
기본값을 갖는 매개변수는 뒤쪽에 위치하는게 좋다.
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값 ...) -> 반환타입 {
함수 구현부
return 반환값
}
func greeting(friend: String, me: String = "dooboo") {
print("Hello \(friend)! I'm \(me)")
}
- 매개변수 기본값을 가지는 변수는 생략 가능
greeting(friend: "Sujin")
//Hello Sujin! I'm dooboo
- 매개변수 기본값 수정 가능
greeting(friend: "dooboo", me: "Sujin")
//Hello dooboo! I'm Sujin
전달인자 레이블
함수를 호출할 때 매개변수 역할을 명확하게 하거나 함수 사용자 입장에서 표현할 때 사용한다.
func 함수이름(전달인자 레이블 매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입 ...) {
함수 구현부
return
}
- 함수 내부에서 전달인자를 사용할 때는 매개변수 이름을 사용
func greeting(to friend: String, from me: String) {
print("Hello \(friend)! I'm \(me)")
}
- 함수 호출시 전달인자 레이블을 사용
greeting(to: "Jay", from: "May")
//Hello Jay! I'm May
가변 매개변수
매개변수 개수가 2개 이상이거나 없을 때 또는 모를 때 사용이 가능하며, 함수당 하나만 가질 수 있다.
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입...) -> 반환타입 {
함수 구현부
return
}
func sayHelloToFriends(me: String, friends: String...) -> String {
return "Hello \(friends)! I'm \(me)"
}
print(sayHelloToFriends(me: "May", friends: "Sujin", "Jay"))
//Hello ["Sujin", "Jay"]! I'm May
//매개변수 없을 때
print(sayHelloToFriends(me: "May"))
//Hello []! I'm May
** 함수는 다양하게 섞어서 응용할 수 있다.
- 데이터 타입으로서의 함수
- 스위프트 : 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어
- 스위프트 함수: 일급객체, 변수/상수 저장 가능, 매개변수를 통해 전달 가능
함수의 타입표현
- 반환타입 생략 불가
(매개변수1타입, 매개변수2타입 ...) -> 반환타입
var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction("Sujin", "May")
//Hello Sujin! I'm May
someFunction = greeting(friend:me:)
someFunction("Sujin", "May")
//Hello Sujin! I'm May
- 타입이 다른 함수 할당 불가
someFunction = sayHelloToFriends(me: friends:)
// 에러 발생 : 매개변수가 여러개인 함수를 할당할 수 없다.
- 함수 응용
func runAnother(function: (String, String) -> Void) {
function("Jungyeon", "Juyeon")
}
runAnother(function: greeting(friend:me:))
//Hello Jungyeon! I'm Juyeon
runAnother(function: someFunction)
//Hello Jungyeon! I'm Juyeon