swift
swift 정리 1
이나주니
2023. 7. 16. 15:06
반응형
배열 및 반복문
//반복문
// 레인지
// 0...5
// 0에서 5까지
for i in 0...5 {
print("호호 index: \()")
}
// 0에서 5 밑에 까지만
for i in 0..<5 {
print("호호 index: \()")
}
/////////////////////////
var myArr : [Int] = [1,2,3,4,5,6,7,8,9,10]
// 기본 for 문
for item in myArr {
print(item)
}
// where 조건아용 for문
for item in myArr where item % 2 == 0{
print("짝수 : \(item)")
}
for item in myArr where item % 2 != 0{
print("홀수 : \(item)")
}
enum
// 타입을 나누는것
// 이건 값을 정의한것이 아니라 케이스만 나누어진것
enum School {
// 기본적 표현
// case elementary
// case middle
// case high
// 또는이렇게도 표현 가능
case elementary, middle, high
}
let mySchool = School.high // enum에 접근해 값을 담음
print ("mySchool: \(mySchool)")
// mySchool: high
//////////////////////////////////////////////
enum Grade : Int {
case first = 1
case seconde = 2
}
let myGrade = Grade.seconde.rawValue
print ("myGrade: \(myGrade)")
// myGrade: seconde
let myGradeVal = Grade.seconde.rawValue
print ("myGrade: \(myGradeVal)")
// myGrade: 2
/////////////////////////////////////////////////
enum schooleDetail {
// 파라미처로 값을 넣어줌
case elementary(name: String)
case middle(name: String)
case high(name: String)
// 파라미터로 받은 값을 문자열로 반환
func getName() -> String {
// 스위치문을 통해 schooleDetail 자신에 있는 값기준으로 케이스를 나누어줌
switch self {
// 타입이 elementary면
case .elementary(let name): // 아래와 같은 것, 파라미터로 받아온 문자열을 반환
return name
case let .middle(name): // 위와 같은 것, 파라미터로 받아온 문자열을 반환
return name
case let .high(name):
return name
}
}
}
let myMiddleSchooleName = schooleDetail.middle(name: "하준학교")
print("myMiddleSchooleName: \(myMiddleSchooleName)")
// myMiddleSchooleName: middle(name: "하준학교")
print("myMiddleSchooleName: \(myMiddleSchooleName.getName())")
// myMiddleSchooleName: 하준학교
랜던값 출력
// 랜덤값 출력
var randomInts: [Int] = [Int]()
for _ in 0..<25 {
let randomNumber = Int.random(in: 0..100)
// 변수 선업후 랜던값 append 로 추가
randomInts.append(randomNumber)
}
print("randomInts: \(randomInts)")
// 25번 반복 하면서 랜던으로 만들어진 0에서 100 까지의 숫자를 집어넣어 출력함
// 출력문은 25개의 숫자로 그때그떄 마다 다름
옵셔널 변수
// 옵셔널 변수
// 옵셔널이란?
// 값이 있을수도 있고 없을수도 있다는 뜻
var someVariable: Int? = nil // 물음표를 붙이면 값이 없을수도 있다는뜻 플러터랑 값음
// Swift에서: nil은 pointer가 아닌, 특정 타입의 value가 없음을 나타낸다. null 과 같음
// Objective-C의 잔재로 pointer로 객체에 접근하는 개념이 사라진 Swift에 nil이라는 것이 남아있게 되었고 이는 다른 언어의 null과 동일한 개념
if someVariable == nil {
someVariable = 90
}
print("someVariable: \(someVariable)")
// someVariable: Optional(90)
언랩핑
옵셔널 변수에 담긴값을 꺼낼때 사용
// 언랩핑이란? 랩 즉 감싸져있는것을 벗기는것
// 90만 딱 가져오는것
// 코드설명 : someVariable에 값이 있다면 otherVariable에 넣어서 쓰겠다는 뜻
if let otherVariable = someVariable {
print("언랩핑됨. 값이있음: \(otherVariable)")
} else {
print("값이없음")
}
// 언랩핑됨. 값이있음: otherVariable : 90
someVal = nil
// someVal이 비어있으면 기본값으로 이걸 넣겠다
let myval = someVal ?? 10
print("myval : \(myval)")
// 10
var firstVal : Int ?? 30
var secondVal : Int ?? 50
unwrap(firstVal)
unwrap(firstVal)
// _ 를 붙여주면 외부에서 값을 던질떄 prameter: 라는것을 안붙여줘도돰
func unwrap(_ prameter Int?) {
print("unwrap() called")
// 값이 없으며 리턴해 버림
// 즉 무시하고 지나감
// unWrappedParam에 prameter 값 넣음
guard let unWrappedParam = prameter else {
// else를 붙여서 값이 없다면 return 함
return
}
print(unWrappedParam: \(unWrappedParam))
}
//결론 언랩핑 하는것은 if let, guard let 두가지가 있다
클래스 vs 스트럭트
스트럭트
메모리에 값을 복사 해서 사용
복사한 값을 수정해도 원래 값에 영향이 가지 않음
// 스트럭트
struct myStruct {
var name : String
var subscribersCount : Int
}
var devJeong = myStruct(name: "인하준", subscribersCount: 123)
var devInClone = devJeong
print("devInClone.name : \(devInClone.name)")
// devInClone.name : 인하준
devInClone.name = "호롤롤로"
print("devInClone.name : \(devInClone.name)")
// devInClone.name : 호롤롤로
print("devJeong.name : \(devJeong.name)")
// devJeong.name : 인하준
클래스
클래스는 서로 연결이 되어있음
메모리에 복사된 값을 수정하면 같이 변경됨
이유 : 같은 주소 메모리를 참조 하기 떄문에 수정
// 클래스
class myCLass {
var name : String
var subscribersCount : Int
// 생성자 = 즉 메모리에 올린다
// init 으로 매개 변수를 가진 생성자 메소드를 만들어야
// 매게변수를 넣어서 그 값을 가진 객체(object)를 만들수 있다
init(_ name: String, _ subscribersCount: Int){
self.name = name
self.subscribersCount = subscribersCount
}
}
var inhajun = myCLass(name: "인하준", subscribersCount: 123)
var inhajunClone = inhajun
print("값 넣기전 inhajunClone.name : \(inhajunClone.name)")
// inhajunClone.name : 인하준
inhajunClone.name = "호홓홓호호"
print("값 넣은후 inhajunClone.name : \(inhajunClone.name)")
// inhajunClone.name : 호홓홓호호
print("값 넣은후 inhajun.name : \(inhajun.name)")
// inhajun.name : 호홓홓호호
반응형