728x90
- 데이터 타입(자료형)
var myNumber : Int = 10 //Int는 생략 가능. 쓸 필요 없음
- Bool, Character, Int, Float, Double, String, Void
- 사용할 때, x = 10이렇게 양쪽 공백이 일관되어야 함
var x = 10
print(type(of:x))
x = 20
print(x)
//Int
//20 출력
var x = 10
print(type(of:x))
x = 20
print("x의 값은 = \(x)") //이렇게 역슬래시 괄호 사용하면 문자열 안에서도 값이 찍힘
//Int
//20 출력
- 제어문, 옵셔널
▶ 옵셔널(Optional) 타입
- 값을 반환할 때 오류가 발생할 가능성이 있는 값은 옵셔널 타입이라는 객체로 감싸서 반환함
- nil : 아무런 값도 반환할 수 없다는 의미
- nil 값을 저정하려면 옵셔널 타입으로 선언해야 함
- 옵셔널 타입 변수를 선언하기 위해서는 타입 선언부 뒤에 ?(물음표)를 씀
● 옵셔널 언래핑(forced unwrapping)
- 옵셔널 변수에 값이 있으면 옵셔널로 "래핑되었다(wrapped)"라고 함
- 옵셔널에 래핑도니 값은 강제 언래핑으로 풀어줌
- 옵셔널형 선언 : 자료형 뒤 ?
- 옵셔널 언래핑 : 변수명 뒤 !
var x : Int = 10
print(x)
// 10 출력
var y : Int? = 20 //이 물음표가 옵셔널타입 변수 선언하는 거.
print(y)
// Optional(20) 출력
var y : Int? = 20 // 자료형 뒤에 물음표. 이 물음표가 옵셔널 타입
print(y!) // 변수 뒤 느낌표. 이 느낌표로 풀어주는 거임
// 10 출력
var y : Int? // y의 초기값을 지웠더니
print(y)
// nil 출력. 값이 없다는 뜻
var y : Int? // y의 초기값을 지우고
print(y!) //값을 보여달라 함
//error 발생
var x : Int = 10
//print(x)
var y : Int? = 20
y = y!+ 1 //옵셔널을 풀어서 1 더함
print(y)
//옵셔널 변수는 그냥 사용하면 안되고 !느낌표로 풀어서 사용해야함
//풀어도 저장하면 또 옵셔널로 돌아간다.
//그래서 결과는 Optional(21) 출력
- 수정 결과
var x : Int = 10
print(x)
var y : Int? = 20
y = y! + 1
x = y! //느낌표를 붙여서 강제로 푸는 강제 언래핑
print(y)
- 강제 언래핑
var x : Int?
x = 10
if x != nil { //if x!=nil 이렇게 쓰면 오류발생함.띄어쓰기 주의
print(x!)
}
else {
print("nil")
}
● 옵셔널 타입 강제 언래핑 : optional binding
- 강제 언래핑 하는 또 다른 방법, 옵셔널 바인딩(optional binding) 이용하여 옵셔널에 할당된 값을 임시로 변수 또는 상수에 할당
if let constantname = oprionalName {
//옵셔널 변수가 값이 있다면 언래핑 해서 일반상수 constnatname에 대입하고 if문 실행
//값이 없다면 if 문의 조건이 거짓이 되어 if문을 실행하지 않음
}
if var variablename = optionalName {
//옵셔널 변수가 값이 있다면 언래핑해서 일반 변수 variblename에 대입하고 if문 실행
//값이 없다면 if문의 조건이 거짓이 되어 if문을 실행하지 않음
}
var x : Int?
x = 10
if let xx=x {
print(x,xx). //Optional(10) 10 출력
}
var pet1: String?
var pet2: String?
pet1 = "cat"
pet2 = "dog"
if let firstPet = pet1, let secondPet = pet2 {
print(firstPet, secondPet)
} else {
print("nil")
}
//cat dog 출력
- 여러값 동시에 언래핑
var x : Int?
var y : Int?
x = 10
y = 10
if let xx = x {
print(xx)
}
else {
print("nil")
}
if let yy = y{
print(yy)
}
else {
print("nil")
}
var x : Int?
var y : Int?
x = 10
y = 10
if let xx = x, let yy = y {
print(xx, yy)
}
else {
print ("nil")
}
- swift에서 optional 변수를 푸는 방법 중 가장 많이 사용하는 방법
옵셔널 바인딩(Optional Binding)**입니다. 옵셔널 바인딩을 사용하면 optional 변수가 nil인지 확인하고, nil이 아닐 경우 안전하게 값을 사용할 수 있습니다.
옵셔널 바인딩의 예
swift
var optionalValue: String? = "Hello, Swift!"
if let unwrappedValue = optionalValue {
print("값이 존재합니다: \(unwrappedValue)")
} else {
print("값이 nil입니다.")
}
설명
- 선언: optionalValue라는 optional 변수를 선언합니다. 초기값으로 "Hello, Swift!"를 할당합니다.
- 옵셔널 바인딩: if let 구문을 사용하여 optionalValue의 값을 unwrappedValue라는 상수에 바인딩합니다. 이 과정에서 optionalValue가 nil이 아닌 경우에만 unwrappedValue가 생성됩니다.
- 사용: 만약 optionalValue가 nil이 아닐 경우, 안전하게 unwrappedValue를 사용할 수 있습니다.
이 방법은 Swift에서 안전하게 optional 값을 처리하는 가장 일반적이고 권장되는 방법입니다.
- nil-coalescing operator (nil 병합연산자)
옵셔널변수 ?? nil일 때 할당되는 값
var x : Int? //값이 없어서 nil
var y = x ?? 0 //nil일 때 ?? 뒤에 있는 값을 써라. 그래서 값이 0이 나옴
print(x)
- 함수 정의와 매소드
#include <stdio.h>
void Fun( int Param ) // parameter(매개변수, 인자), 형식 매개변수(formal parameter)
{
printf("%d",Param);
}
int main()
{
Fun( 10 ); // 10은 argument(인수), 실 매개변수(actual parameter)
return 0;
}
- 매소드(method)
: 특정 클래스, 구조체, 열거형 내의 함수
함수를 클래스 내에 선언하면 매소드라 부
func <함수명> (<매개변수 이름>: <매개변수 타입>, <매개변수 이름>: <매개변수 타입>,... ) -> <반환값 타입> {
// 함수 코드
}
void sayHello() { //c, c++
printf("Hello");
}
func sayHello() -> Void { //swift, 함수 정의
print("Hello")
}
sayHello() //함수 호출 (앞에있든 뒤에있든 상관없음)
func add(x : Int, y : Int) -> Int { //뒤 int는 리턴형
return x + y
}
var z = add(x : 10, y : 20)
print()
//결과 : 30
func add(x : Int, y : Int) -> Int { //뒤 int는 리턴형
return x + y
}
print(add(x : 10, y : 20))
print(type(of:add))
//결과 : (Int, Int) -> Int
리턴형이 void면 ()
func add( _ x : Int, with y : Int) -> Int {
return x+y
}
print(add(10, with:20))
//print(type(of:add))
- 함수명이 궁금할 때?
func add1(first x : Int, second y : Int) -> Int {
print(#function) // add(first:second:)
return(x+y)
}
let a = add(first:10, second:20)
func add2( _ x : Int, with y : Int) -> {
print(#function) // add2(_:with:)
return x + y;
}
func add3(x : Int, y : Int) -> {
print(#function) // add3(x:y:)
return x+y
}
728x90