ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 201012 - TIL
    TIL/2021 2020. 10. 13. 02:40

    Swift 문법

     

    Swift문법을 1회독을 했다. 하지만 Protocol, Generic 등 뒷부분이 완전히 이해가 되지 않아서 처음부터 복습을 하면서 뒷부분을 중점적으로 여러 번 볼 계획이다. 오늘은 Enumeration에 대해서 다시 복습을 했다.

    • Enumeration case Pattern
    • CaseIterable Protocol
    • @unknown 

    세가지를 중점적으로 복습했다.

    for, if, switch문에서 Enum case를 매칭 시키면서 값을 바인딩해 처리하는 방법과 CaseIterable 프로토콜을 채용하여 allCases 속성을 이용하여 Enum case를 배열에 담아 배열의 메서드와 속성을 사용하는 법.

    그리고 @unknown을 이용하여 switch문에서 case를 모두 매칭 시키지 않았을 때 경고가 출력되게 하는 방법을 공부했다.

     

    그리고 맨 처음부터 다시 복습을 시작했다.

    • 구성요소
    • Variable, Constant
    • Type
    • Operator

    공부하며 부족함을 느꼈던 부분은 String의 method와 속성 사용법이였다.

    String부분을 포스팅하기 전에 다시 한번 복습을 해야겠다.

     

     

     

     

    iOS

     

    • iOS 12.4 이전 버전의 프로젝트를 작성할 때 발생하는 에러 수정하는 법
    • 12.4 버전 시뮬레이터 실행 시 화면이 안 나오는 문제 해결 방법
    • Action으로 Viewcontroller에 연결하면 왜 sender가 Any로 선언돼있을까?
    • Outlet이 IUO로 선언되어 있는 2가지 이유!
    • Outlet과 Action
    • Alert 생성하기

    이렇게 공부했다!

     

     

    에러 수정하기

     

    Deployment Info

    여기서 iOS 13.0까지는 빌드해도 아무런 문제가 발생하지 않지만 12.4부터 에러가 발생한다!

    AppDelegate.swift 파일로 가서

     

    22번과 29번 줄에 추가!

     

    그리고 SceneDelegate.swift에 가서

     10번 줄에 추가!

     

    그리고 12.4 버전 시뮬레이터로 빌드하고 실행하면

    이렇게 된다!ㅠㅠ
    appdelegate로 가서 window 속성을 추가해야한다고 한다.
    추가!

    이렇게 추가하면 잘 작동한다.

     

     

     

     

     

    Alert 가지고 놀기

     

    UIAlertController 인스턴스 생성

    @IBAction func presentAlert(_ sender: Any) {
            let makeAlert = UIAlertController(title: "결과", message: "여기에 값", preferredStyle: .alert)   
        }

    버튼을 클릭해도 아무런 반응이 없다.

     

     

    present(makeAlert, animated: true)

    이 코드를 추가했더니

        @IBAction func presentAlert(_ sender: Any) {
            let makeAlert = UIAlertController(title: "결과", message: "여기에 값", preferredStyle: .alert)
            present(makeAlert, animated: true)
        }
        

    Alert이 등장했지만 끄는 버튼이 없다.

    Alert은 출력됐지만 끄는 버튼이 없다...!

     

    let actionAlert = UIAlertAction(title: "확인", style: .default)
    makeAlert.addAction(actionAlert)

    두 코드를 추가했다. UIAlertAction 인스턴스를 생성한 후에 makeAlert로 addAction메서드를 호출

        @IBAction func presentAlert(_ sender: Any) {
            let makeAlert = UIAlertController(title: "결과", message: "여기에 값", preferredStyle: .alert)
            let actionAlert = UIAlertAction(title: "확인", style: .default)
            
            makeAlert.addAction(actionAlert)
            present(makeAlert, animated: true)
        }
        

    확인 버튼이 생겼다.

     

     

     

    let makeAlert = UIAlertController(title: "결과", message: "여기에 값", preferredStyle: .actionSheet)

    UIAlertController 인스턴스의 preferredStyle 속성을 .actionSheet으로 바꿔봤다.

    아래에서 위로 나오는거로 변경!

    Alert의 형태가 변했다. 

     

     

    let actionAlert = UIAlertAction(title: "확인", style: .default)

    에서 style 속성도 변경을 해보았는데 눈에 띄는 변경점은 확인의 색상이 변했다.

    눈에 띄는 변화는 별로 없다.

    style

    Additional styling information to apply to the button. Use the style information to convey the type of action that is performed by the button. For a list of possible values, see the constants in UIAlertAction.Style.

    cancel case를 사용하면 작동을 취소하거나 요소가 변경되지 않고 남아있을 때 사용하는 Style인 거 같다. 아직 언제 사용하는지 감은 안온다.

     

    destructive case는 action이 바뀌거나 data가 삭제됨을 나타낼 때 사용하는 거라고 쓰여있다.

    생각을 해보면 데이터를 지우시겠습니까?라는 문구는 ActionSheet로 나오고 빨간 글씨로 삭제 이런 식으로 쓰여 있던 게 떠올랐다.

    일단 위에서 내가 만든 알람은 데이터를 지우거나 뭔가 변경되는 게 아니므로 어울리지 않는다!

    하지만 나중에 버튼을 누르면 데이터를 지우는 일이 있다면 아래와 같이 만들면 될거 같다.

     

    이런 느낌?? 이였던거 같다.

     

    import UIKit
    
    class ViewController: UIViewController {
        
        @IBAction func presentAlert(_ sender: Any) {
            let makeAlert = UIAlertController(title: "경고", message: "데이터를 정말 삭제하시겠습니까?", preferredStyle: .actionSheet)
            let actionAlert = UIAlertAction(title: "삭제", style: .destructive)
            
            makeAlert.addAction(actionAlert)
            present(makeAlert, animated: true)
        }
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
        }
    
    }

    마지막 ActionSheet의 코드이다.

     

     

     

     

     

    728x90

    'TIL > 2021' 카테고리의 다른 글

    201014 - TIL  (0) 2020.10.15
    201013 - TIL  (0) 2020.10.14
    201009 - TIL  (1) 2020.10.10
    201008 - TIL  (0) 2020.10.09
    201007 - TIL  (0) 2020.10.08
Designed by Tistory.