ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift 정리 1
    swift 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 : 호홓홓호호
    반응형

    'swift' 카테고리의 다른 글

    Swift 지도 만들기 Map View  (0) 2024.11.23
    swift present 메서드  (0) 2024.10.26
    unrecognized selector sent to instance  (1) 2024.10.26
    Swift 피커 뷰 사용해서 원하는 항목 선택하기  (1) 2024.10.13
    Swift 알람 시계 만들기  (2) 2024.10.13

    댓글

Designed by Tistory.