멀티라인 텍스트
var greeting = """
Hello
World
"""
""" 내용 """을 사용하여 표현한다.
Swift의 표준 문자열은 따옴표로 시작하고 끝나지만 줄 바꿈을 해서는 안 된다.
짧은 텍스트에서는 잘 작동하지만 저장하려는 텍스트가 길다면 보기 힘들어진다. 특히, 다른 사람과 코드를 공유하며 협업 하려눈 경우에는 멀티라인 텍스트를 사용하는것이 효과적이다.
문자 보간법
let name = "대성"
var greeting = "Hello \(name)" // 출력값 : Hello 대성
let = height = 184
let myInfo = "My height is \(height)" // 출력값 : My height is 184
\()를 사용하여 표현한다.
변수 또는 상수 등의 값을 문자열 내에 나타내고 싶을 때 사용한다.
함수와 메서드의 차이?
함수는 독립적으로 존재하고, 메소드는 Class 및 객체에 종속적이다.
함수는 예를들어 addNumbers(5,3)와 같이 함수 이름 뒤에 괄호를 사용하여 호출되지만, 메서드는 MyObject.increment()와 같이 객체 또는 타입 인스턴스 뒤에 메서드 이름을 호출한다.
func 함수_이름(아규먼트_레이블: 파라미터_타입) -> 리턴_타입{
// ... 코드
}
//네이밍 컨벤션으로 카멜케이스를 사용한다.(Ex- methodName O/ method_name x)
func sayHi(friend: String){
print("Hi~ \(friend)!")
}
sayHi(firend: "대성")
func sayHi(to friend: String){
print("Hi~ \(friend)!")
}
sayHi(to: "대성")
func sayHi(_ friend: String) -> String {
return ("Hi~ \(friend)!")
}
print(sayHi("대성"))
// 출력값: Hi~ 대성!
인스턴스 : 클래스 / 구조체 / 열거형에서 생셩된 객체를 '인스턴스'라고 지칭한다.
프로퍼티 : 클래스, 구조체, 열거형과 연관되어 있는 정보 or 값 등을 의미한다.
메서드 : 클래스, 구조체, 열거형과 관련된 함수라는 의미로 사용된다.
정리하면, 함수는 특정한 타입에 속하지 않으며 독립적으로 정의되고 호출된다. 반면에 메서드는 특정한 타입에 속해 있으며, 해당 타입의 인스턴스에 대해 작동하고 상태를 변경할 수 있는 함수이다.
네이밍 컨벤션
1. 카멜 케이스
var camelCase
- 중간 글자들은 대문자로 시작하지만 첫 글자가 소문자인 경우에는 낙타와 모양이 비슷하다 하여 카멜 케이스라고 한다.
2. 파스칼 케이스
var PascalCase
- 첫 글자와 중간 글자들아 대문자인 경우 파스칼 언어의 표기법과 유사하다고 하여 파스칼 케이스라고 한다.
3. 스네이크 케이스
var snake_case
- 언더바(_) 가 들어 있는 표현 방식을 뱀처럼 생겼다고 하여 스네이크 케이스라고 한다.
#argument & parameter
argument(전달인자)는 함수를 call 할 때 전달하는 실제 값
parameter(매개변수)는 함수의 정의에 포함되는 변수
function test(param1, param2){
return (param1 + para2)
}
test( 5 , 6)
- 파랑 : Parameters
- 빨강 : Arguments
Any 배열
Any배열은 어떤 타입의 요소도 저장할 수 있는 배열이다. 즉 'Int', 'Double', 'String', 사용자 정의 클래스 등의 모든 값들을 'Any'배열에 넣을 수 있다.
// Any 타입의 배열 선언 및 초기화
var anyArray: [Any] = []
// 배열에 다양한 타입의 값 추가
anyArray.append(42) // Int 값 추가
anyArray.append("Hello") // String 값 추가
anyArray.append(3.14) // Double 값 추가
anyArray.append(true) // Bool 값 추가
// 배열 요소 접근 및 출력
for item in anyArray {
print(item)
}
요런 느낌으로!
옵셔널
- 값이 없을 수 있는 상황에서 옵셔널을 사용한다.
- 옵셔널은 물음표로 나타낸다.(타입 어노테이션)
- 값이 있고 옵셔널로 래핑(wrapping)해놓은 값을 언래핑(unwrapping)하여 해당 값에 액세스할 수 있다.
- 옵셔널 타입끼리의 연산은 불가능
- 예시 코드
// 축약 타입 표현
var serverResponseCode: Int? = 404
// 정식 타입 표현
var myPetName: Optioncal<String> = "멍멍이"
func pay(with card: String?){
// 구현 코드
}
// 옵셔널 타입끼리의 연산은 불가능
var num1: Int? = 4
var num2: Int? =2
num + num2 // 에러 발생 <- why? 옵셔널끼리 연산은 x
let optionalString1: String? = "Hello, "
let optionalString2: String? = "world!"
// 옵셔널 String 값들을 연결하려는 시도
let result = optionalString1 + optionalString2 // 에러 발생!
nil
옵셔널 변수에 특수한 값 nil로 지정하여 값이 없는 상태를 나타낼 수 있습니다.
또한, 변수에 nul을 할당함으로써 값이 없는 상태의 옵셔널 프로퍼티를 만들 수 있습니다.
var serverResponseCode: Int? = 404
serverResponseCode = nil
var surveyAnswer: String?
//-> 값을 안 넣어주면 자동으로 nil값이 입력 == var surverAnswer: String = nil과 같은 말
옵셔널 강제 언래핑
강제 언래핑(Force unwrapping)은 !를 써서 강제로 옵셔널 추출을 한다.
강제 언래핑을 잘못 사용할 경우 프로그램이 비정상적으로 종료될 수도 있으므로 반드시 Nul이 아닌 것이 확실한 상황에서 사용해야 한다.
(웬만하면 최대한 안 쓰는게 좋다.)
옵셔널 바인딩 -> 잘 정리되어 있는 블로그가 있어서 참조하자
https://babbab2.tistory.com/17
코드 예시
//강제 언래핑이 성공한 경우
let numver = Int("42")!
// String값을 Int로 변환하는 함수는 return값으로 옵셔널 값을 반환한다.
print(number)
// 출력 값 : 42
//강제 언래핑이 실패하는 경우
let address: String? = nil
print(address!)
// 가급적 사용 XXXX
옵셔널 변수의 값이 nil일 때를 위해 기본 값 설정하기
값이 nil일 경우를 위해 기본값을 성정할 수 있다.
??를 사용하여 기본값을 사용할 수 있는데, ??을 사용해 기본값을 부여한 변수는 옵셔널 타입이 아니다.
let(var) a = b ?? c 형태로 이루어지는데 b는 옵셔널 타입이고, b가 nil일 경우에는 a에 c가 대입되고, nil이 아닐 경우에는 옵셔널을 제거한 값이 a에 대입된다.
var optNumber: Int? = 3
let number = optNumber ?? 5
print(number) // 출력 값 : 3
//number은 Int? 타입이 아니라 Int 타입
optNumber = nil
let number2 = optNumber ?? 5
print(number)
//number은 Int? 타입이 아니라 Int 타입
옵셔널 체이닝
옵셔널을 연쇄적으로 사용하는 것을 옵셔널 체이닝이라고 한다.
. 을 통해 내부 프로퍼티나 메서드에 연속적으로 접근할 때 옵셔널 값이 있으면 옵셔널 체이닝으로 접근 가능하다.
'Swift' 카테고리의 다른 글
내가 볼려고 만든 SOLID정리 (0) | 2024.06.07 |
---|---|
문법 기초 공부 (객체 지향) (1) | 2024.06.05 |
문법 기초 공부 (배열, 집합, 딕셔너리) 미완 (1) | 2024.06.05 |
문법 기초 공부 (스택&큐) (0) | 2024.06.05 |
[iOS Swift] Map, Filter, reduce 함수 (고차 함수) (0) | 2024.05.09 |