문자열 보간법 : 프로그램 시행 중 문자열 내에 변수 또는 상수의 값을 표현
사용법 \()
let value = 10
"현재 값은 \(value) 입니다."
콘솔로그 남기기
print 함수 : 단순 문자열 출력
print("test값은 10이다")
=> test값은 10이다
dump 함수 : 인스턴스의 자세한 설명(description 프로퍼티)까지 출력
dump("test값은 \(10+10)이다")
=> - "test값은 20이다"
변수와 상수 선언
// 상수 선언 키워드 let
let constant: String = "차수에 변경이 불가능한 상수 let"
// 변수 선언 키워드 var
var variable: String = "차후에 변경이 가능한 변수 var"
//상수 선언 후에 나중에 값 할당하기
// 나중에 할당하려고 하는 상수나 변수는 타입을 꼭 명시해주어야 한다.
let sum: Int
let inputA: Int = 100
let inputB: Int = 200
sum = inputA + inputB
sum = 1 // 그 이후에는 다시 값을 바꿀경우 오류 발생
기본 데이터 타입
Bool : true, false 값만 가능, 0이나 1을 할당시에 오류
var vBool: Bool = true
Int
var vInt: Int = -100
UInt : 부호가 없는 양의 정수
var vUInt: UInt = 100
Float
var vFloat: Float = 1.234
Double
var vDouble: Double = 1.234
Character : 문자 여러개가 입력될 시에 오류
var vCharacter: Character = "A"
String
var vString: String = "abcdef"
vString = vString + "ghijk"
Any - Swift의 모든 타입을 지칭하는 키워드
var vAny: Any = 100
vAny = "text type"
vAny = 123.123
AnyObject- 모든 클래스 타입을 지칭하는 프로토콜
class AClass {}
var anyClass: AnyObject = AClass()
anyClass = 111.22 //class가 아닌 변수값은 오류
nil - null값
var vAny2: Any = nil // 어떤 데이터 타입이 들어올 수 있지만 nil은 오류발생
컬렉션 타입
Array - 순서가 있는 리스트 컬렉션 : 선언 및 생성
var arrInt: Array<Int> = Array<Int>()
var arrDou: Array<Double> = [Double]()
var arrStr: [String] = [String]()
var arrChar: [Character] = []
arrInt.append(1)
arrInt.append(2) // [1, 2]
arrInt.contains(2) //true
arrInt.contains(3) //false
arrInt.remove(at: 0) // 1을 제거
arrInt.removeLast() // 2를 제거
arrInt.removeAll() // 전체제거
arrInt.count // 갯수
Dictionary - 키와 값의 쌍으로 이루어진 컬렉션
var dic: Dictionary<String, Any> = [String: Any]()
dic["Key1"] = "value test"
dic["KeyInt"] = 100
dic.removeValue(forKey: "Key1") //특정키 삭제
dic["Key1"] = nil // 키 삭제와 동일효과
let initDic: [String: String] = ["Key1":"value1", "key2":"value2"]
let strValue: String = initDic["key1"] //nil값이 있을 수 있으므로 오류발생
Set - 순서가 없고, 멤버가 유일한 컬렉션
var setInt: Set<Int> = Set<Int>()
setInt.insert(11) // {11}
setInt.insert(22) // {11, 22}
setInt.insert(33) // {11, 22, 33}
setInt.insert(33) // {11, 22, 33} 중복값 존재 X
setInt.contains(22) //true
setInt.remove(33) // {11, 22}
setInt.removeFirst() // {22}
setInt.count
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) // {3, 6, 7, 5, 2, 4, 1}
let sortedUnion: [Int] = union.sorted() // {1, 2, 3, 4, 5, 6, 7}
let intersection: Set<Int> = setA.intersection(setB) // {5, 3, 4}
let subtracting: Set<Int> = setA.subtracting(setB) // {2,1}
함수
MARK - 함수의 선언
함수선언의 기본형태
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
/* 함수 구현부 */
return 반환값
}
함수에 매개변수 기본값 설정 - 매개변수 타입 뒤 = 이후 기본값 설정
func sum(a: Int, b: Int = 3) -> Int {
return a + b
}
반환값 없는 함수
func printsum(a: Int, b: Int) -> Void{
print(a+b)
}
반환값이 없을때 Void 생략가능
func printsum2(a: Int, b: Int) {
print(a+b)
}
전달인자 레이블
// 전달인자 레이블은 함수를 호출할 때 매개변수의 역활을 좀더 명확하게 하거나
// 함수 사용자의 입장에서 표현하고자 할 때 사용함
func helloprint(str1 text1: String, str2 text2: String) {
print("str1 \(text1) - str2 \(text2)")
}
helloprint(str1: "test111", str2: "test2222")
가변 매개변수 사용시
func helloprint2(text1: String, text2: String...) {
print("str1 \(text1) - str2 \(text2)")
}
helloprint2(text1: "test111", text2: "test2222", "test33", "test44")
helloprint2(text1: "가변인자는 안넘기기..")
swift의 함수는 일급객체이므로 변수, 상수 등에 저장가능하고 매개변수를 통해 전달 할 수 있다
var func1: (String, String) -> Void = helloprint(str1:str2:)
func1("test111", "test2222")
타입이 다른 함수는 할당 할 수 없다
func1 = helloprint2(text1:, text2:)
조건문
If문
var vInt = 110
if vInt < 100 {
print("100 미만")
} else if vInt > 100 {
print("100 초과")
} else {
print("100")
}
switch문
switch vInt {
case 0:
print("0")
case 1..<100:
print("1~99")
case 100:
print("100")
case 101...Int.max:
print("over 100")
default:
print("unknown")
}
반복문
var integers = [1, 2, 3]
let people = ["aa": 10, "bb": 20, "cc": 30]
for문
for integer in integers {
print(integer)
}
// Result : 1 2 3
for (name, value) in people {
print("\(name): \(value)")
}
// Result : bb: 20, cc: 30, aa: 10
while문
while integers.count > 1 {
integers.removeLast()
}
repeat 문
repeat {
integers.removeLast()
} while integers.count > 0
옵셔널
// 값이 있을수도있고 없을수도 있음을 표현
// nil이 할당 될 수 있는지 없는지 표현
func optionalfunction(optionalparam: Int?) {
//code
}
func notOptionalfunc(notoptionalparam: Int) {
//code
}
optionalfunction(optionalparam: nil) //error 발생이 되지않음
notOptionalfunc(notoptionalparam: nil) //error 발생
열거형 옵셔널 사용 emum + general
enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
}
let optionalValue: Optional<Int> = nil //옵셔널로 지정하여 값 선언
let optionalValue: Int? = nil // ?로 옵셔널을 표현가능
옵셔널 표현
1. 느낌표(!)를 이용한 암시적 추출 옵셔널
var optionaltype1: Int! = 100
// 기존변수처럼사용가능
// nil 할당가능
// nil값을 할당을 받은상태로 산식계산등 잘못된 접근시 런타임오류 발생
2. 물음표(?)를 이용한 옵셔널
var optionaltype2: Int? = 100
// nil 할당 가능
// 기존 변수처럼 사용불가 - 옵셔널과 일반 값은 다른 타입이므로 연산불가
옵셔널 추출
- 옵셔널 바인딩
1. nil 체크 + 안전한 추출
2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옵니다.
3. if-let 방식 사용
- 강체추출 : 옵셔널에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식, 만약 값이 없을경우(nil) 런타임 오류가 발생하기 때문에 추천되지 않습니다.
'Programing > Swift & Xcode' 카테고리의 다른 글
Swift 문법정리 #3 (0) | 2022.09.04 |
---|---|
swift 문법 정리 #2 (0) | 2022.06.19 |
댓글