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 : 호홓홓호호
반응형