var num : Int //Int형 변수 num 선언
let nameFile : String //String형 상수 nameFile 선언
변수명 생성 규칙
UpperCamelCase : 두가지 이상의 단어가 결합된 변수명을 만들 때 단어의 시작을 모두 대문자로 명명
lowerCamelCase : uppercamelcase와 비슷하지만 첫 시작 단어의 첫번째 글자를 소문자로 한다는 차이가 있다.
- 주의점
일반적인 Swift 함수,변수명을 만들땐 lowercamelcase를 사용하고 클래스, 구조체, 열거형등을 사용할 때 uppercamelcase를 사용한다.
var charName= "JH" // error
var charName = "JH"
print(charName) // JH
var name : string //error
var name : String
var name : String = "JH" //사용하지 않음
var name = "JH"
//타입추론의 기능으로 인해 자동으로 String형으로 인식
Swift에는 타입추론이라는 기능이 있어 타입을 명시하지 않고 더욱 간결하게 코드 작성이 가능하다.
var address = "서울" //String형으로 인식
var address : Charater = "서울"
// 명시해주어 Characte형으로 인식하게 된디.
var name : String
name = "홍길동"
print("저의 이름은 \(name) 입니다.")
let frogname : String //타입 어노테이션으로 인한 초기화 지연
.
.
frogName = "개굴" //이와같이 초기화가 보장되어야 한다.
튜플은 함수에서 동일하지 않은 자료형을 가진 여러 값들을 한번에 반환할 수 있는 점이 매우 강력한 부분이다.
let student : (String, Int, String) = ("JH", 24 , "male")
var school = student.1
print(school)
let student: (name: String, age: Int, sex: String) = (name: "JH", age: 24, sex: "male")
let myTuple = (10, 12.1, "Hi")
//myTuple의 자료형 = Int , Double, String
let myTuple = (count: 10, length: 12.1, message: "Hi")
//myTuple의 자료형 = Int , Double , String
print(myTuple.message, myTuple.2)
//출력값 = Hi Hi
var (name, age , _ ) = myTuple
print(myTuple) //출력 = name , age 만을 출력한다.
func voidPrac(_ p : String ) {
print(p)
}
let log : (String)->Void = voidPrac
log("HI")
p를 출력하는 함수 voidPrac을 만들고 그 만든 함수를 log라는 상수에 대합한 후 p를 출력하는 log에 Hi 라는 값 을 대입 했기 때문에 Hi가 출력되게 된다.
var name : String? //옵셔널 선언
name = "JH"
print(name)
옵셔널은 자료형 뒤에 ?를 붙여 선언한다.
2번째 줄과 같이 값을 지정해 줄 수 있으며 이렇게 값이 주어졌을 경우
값을 출력할 수 있지만 옵셔널이 감싸진 값을 반환하게 된다.
var x = Int?
x = 5
print(x) // 옵셔널로 감싸진 5
print( x + 1 ) //error
print( x! + 1 ) // 6
let optionalName: String? = "Jea"
if let name = optionalName {
print("이름이 \(name) 입니다.")
} else {
print("값이 없습니다.")
}
위 코드에선 옵셔널 형으로 선언 되었지만 jea 라는 값이 존재하기 때문에 "이름이 jea 입니다" 라는 값이 출력되게 된다.
하지만 값이 존재하지 않는 아래의 경우
let optionalName: String?
값이 존재하지 않기 때문에 else문인 "값이 없습니다"를 출력하게 된다.
var pet1: String?
var pet2: String?
pet1 = "cat"
pet2 = "dog"
if let firstPet = pet1, let secondPet = pet2 { //1
print(firstPet, secondPet)
} else {
print("nil")
}
if let firstPet = pet1, secondPet = pet2 {
let defaultColor = "black"
var userDefinedColor: String?
var myColor = userDefinedColor ?? defaultColor
print(myColor)
userDefinedColor = "red"
myColor = userDefinedColor ?? defaultColor
print(myColor)
red는 옵셔널 형이 아닌 일반 String형인 red가 반환되게 된다.
이유는 nil 병합연산자를 사용하게 될 경우 이미 myColor에 값이 할당될 때 옵셔널 형이 없는 상태로 저장되기 때문에 마지막에 출력되는 red는 옵셔널 형이 아닌 값이 저장되게 되는 것이다.
x += y // x와 y를 더하고 그 결과를 x에 할당
x -= y //x에서 y를 빼고 그 결과를 x에 할당
x *= y //x와 y를 곱하고 그 결과를 x에 할당
x /= y //x를 y로 나누고 그 결과를 x에 할당
x %= y //x를 y로 나눈 나머지를 x에 할당
x &= y //x와 y의 bit AND 연산 결과를 x에 할당
x |= y //x와 y의 bit OR 연산 결과를 x에 할당
x == y //x 와 y 가 같으면 True 반환
x == y //x와 y가 같다면 true를 반환
x > y //x가 y보다 크면 true를 반환
x >= y //x가 y보다 크거나 같다면 true를 반환
x < y //x가 y보다 작다면 true를 반환
x <= y //x가 y보다 작거나 같다면 true를 반환
x != y //x와 y가 같지 않다면 true를 반환
! = NOT
&& = AND
|| = OR
^ = XOR
x...n // x부터 n까지
x..<n // x부터 n 미만까지
let names = ["A", "B", "C", "D"]
for name in names[2...] {
print(name) //C D
}
//[...2] A B C
//[..<2] A B
var x = 10
var y = 56
print(\( x<y ? x : y)

let name = "JH"
if name is String {
print("문자열 값이야!")
}else{
print("문자열이 아닌데?")
}
- for 상수명 in 컬렉션 또는 범위 {
// 실행될 코드
}
참조체 i 대신 _(언더스코어)를 사용해 생략할 수 있다.
for i in 1...5 {
print("\(i) 안녕")
}
for _ in 1...5 {
print("안녕")
}
let names = ["A", "B", "C", "D"]
for name in names {
print(name)
} //A B C D 출력
while 조건식 {
// 반복 코드
}
while 문 = 조건문 확인 후 코드 진행
repeat~while 문 = 코드 실행 후 조건문 확인
repeat {
//
} while 조건식
var i = 10
repeat {
i=i-1
print(i)
} while (i > 0)
//출력 = 9 8 7 6 5 4 3 2 1
for i in 1..<10 { if i > 5 break print(i) }
- 위와 같이 코드를 쓰게 되면 1부터 시작되게 되는데 처음부터 조건문에 부합하지 않아 에러가 나기 때문에 break 문을 걸어 반복문을 종료시킨다.
for i in 1..<10 { if i < 5 break print(i) }수정
미만 연산자를 초과 연사자로 바꾸게 되면 1이 반복문을 돌다가 6번째 반복에서 코드가 6이 되기 때문에 5까지 출력 후 반복문이 끝나게 된다.
for i in 1...10 {
if i % 2 == 0 {
continue
}
print(i)
}
//1 3 5 7 9
if 불리언 표현식 {
// 표현식이 참일 경우 실행되는 코드
} else {
// 표현식이 거짓일 경우 실행되는 코드
}
var x = 3
if x % 2 == 0 {
print("짝수")
}else{
print("홀수")
}
- && : 논리적인 연결을 강조한다.
if x % 2 == 0 && x != 0 {
//실행 될 코드
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
> - , : 조건을 나열하여 깔끔한 조건을 쌓고 싶을 때 사용한다.
if x % 2 == 0 , x != 0 {
//실행 될 코드
}
guard <불리언 표현식> else {
// 표현식이 거짓일 경우에 실행될 코드
<코드 블록을 빠져 나갈 구문>
}
// 표현식이 참일 경우에 실행되는 코드는 이곳에 위치
특정 조건이 맞지 않을 경우 현재 함수나 반복문을 빠져나갈 수 있게 한다.
내가 원하는 조건들이 들어있는 case문이 존재하고 값을 넣었을때 맞는 case를 반환하는 반복문이다.
필히 case문 다음엔 구문이 들어가 있어야 한다.
switch 표현식
{
case match1:
구문
case match2:
구문
case match3, match4:
구문
default:
구문
}
모든 case 문에는 자동으로 break 문이 들어가 있다.