iOS 70

[IOS] UserDefaults 로컬 저장소에 저장 및 불러오기

UserDefaults는 Key와 Value로 이루어져 있습니다. (리액트에서 리덕스와 비슷한 느낌으로 사용 가능할듯 싶습니다.) 아니면 웹 브라우저의 LocalStorage와 비슷한 느낌이기도 하네요. 저장할 데이터 만들고 받아오기 -> 저장할 데이터는 내 마음대로 할 수 없음으로 encoding 해주거나 원하는 데이터 형식으로 바꿔주는작업이 필요합니다. (iOS는 왜 데이터를 그냥 쓰게 못 두는거야ㅜㅜ 장점이자 단점이네요) 암튼.. encoding을 다뤄보고 저장에서는 decoding을 해 보도록 하겠습니다. (do-catch 문 생략) 저장 - propertyListEncoder() 이용 // 저장할 데이터의 struct가 다음과 같은 예시라고 가정 struct exampleStruct: codab..

iOS/Swift 2022.02.03

[IOS] Alert 창 다루기

alert창은 사용자에게 질문을 하듯이 사용 가능합니다. alert를 띄우는 방법에 대해 알아보겠습니다. // alert 변수 만들기 // preferredStyle이 .actionSheet이면 아래에서 올라오는 선택 창을 띄울수 있다. let alert = UIAlertController(title: "화면에 띄울 제목", message: "화면에 띄울 메세지", preferredStyle: .alert) // 추가 버튼 만들기 let addButton = UIAlertAction(title: "버튼이름", style: .default, handler: { [weak self] _ in // 메모리 누수 에방 // 등록을 눌렀을 때 실행될 클로저 // alert의 TextField에서 받아온다. 배열..

iOS/UIKit 2022.02.03

[IOS] UIBarButton 커스텀

먼저 UIBarButton을 만들고 동작을 커스텀해 보겠습니다. 이렇게 하는 이유는 원래는 화면에 표시되지 않고 필요할때 사용하기 위해서 입니다. // 버튼 변수 만들기 var someButton: UIBarButtonItem? // action은 버튼 클릭시 호출 메서드 self.someButton = UIBarButtonItem(barButtonSystemItem: .스타일, target: self, action: #selector(@objc함수 지정)) // selector 메서드 정의 @objc func donebuttonTap(){ // 코드 }

iOS/UIKit 2022.02.03

[IOS] UITableView (UITableViewDataSource, UITableViewDelegate)

UITableView의 사용법에 대해서 알아보겠습니다. TavbleView를 @IBOulet으로 받아와주고 사용하면 되는데 TavbleView를 사용하는 뷰컨트롤러에 UITableViewDataSource와 UITableViewDataSource 프로토콜을 채택해 데이터를 다루고 셀을 조절할 수 있습니다. 프로토콜 채택은 다음 두가지 방법이 있습니다. (사실 똑같은 내용인데 가독성 차이가 있습니다.) 1. 뷰컨트롤러에 직접 상속 2. extention 이용 이것들을 사용하기 위해선 viewDidLoad()에 delegate 패턴을 사용한다고 알려줘야 합니다. 사용하는 방법의 요점은 다음과 같습니다. 이후 tableView의 cell을 적절히 조절해 사용합니다. import UIKit class ViewC..

iOS/UIKit 2022.02.03

[IOS] UIButton의 text를 가져와 사용하기

ViewController Class에서 UIButton의 Text를 가져와 사용해 보도록 하겠습니다. 간단하게 될 줄 알았는데 값을 불러오지 못해 한참 헤맸네요.. 일단 @IBOulet이나 @IBAction으로 버튼을 연결하는데 @IBAction에서 처리하는 예제를 해보겠습니다. 다음 예제를 보면 Button의 Textsms 5입니다. 그러면 sender로 Button이 무엇인지 받아오고 여기의 title에 접근하는데 .title(for: .normal)로 접근합니다. for: 뒤에 다른 것들은 상황에 따라 다른 값인듯 한데 아무것도 안했을때 기본은 .normal임으로 해당 값을 사용합니다. @IBAction func fiveClick(_ sender: UIButton) { // sender.titl..

iOS/UIKit 2022.02.01

[IOS] @IBDesignable , @IBInspectable

@IBDesignable은 Object를 커스텀했을때 스토리보드에서 바로 볼 수 있도록 해 주는 요소이다. - 남용하면 빌드 시간이 길어지고 가끔 오류를 뱉어 Xcode를 다시 껐다 켜야했다.. @IBInspectable은 Object를 커스텀하고 StoryBoard inspecter에서 조작이 가능하게 해 주었습니다. 버튼을 커스텀하는 예시를 보면 import UIKit // UIButoon을 커스텀하는 예제로 꼭 UIButton을 상속해 주어야 한다. // 변경되면 스토리보드에서 바로 볼 수 있다. @IBDesignable class RoundButton: UIButton { // @IBInspectable을 줌으로 스토리보드에서 값 변경 가능하다. @IBInspectable var isRound :..

iOS/UIKit 2022.02.01

[Swift] error 종류 만들기와 catch

import UIKit // 에러 처리 예제 // 에러 종류 정하기 enum exError: Error { // 발생할 에러 종류 case unknown case exErrorOne(e:Int) case exErrorTwo(e: Int) } // 에러 던지기 //throw exError.exErrorOne(e: 40) // 에러 처리 1 // 함수에서 발생한 오류 해당 함수에 전파하는 경우 func checkError(e: Int) throws -> String{ guard e != -1 else{throw exError.unknown} guard e >= 30 else{throw exError.exErrorTwo(e: 30)} return "아무 오류도 발생하지 않음" } // do-catch 사용법 ..

iOS/Swift 2022.01.31

[IOS] 화면(ViewController)간 데이터 주고 받기 2 상위->하위

d상위에서 하위로 데이터를 전달하는건 delegate pattern을 이용하는 것 보다 간단합니다. 이는 Segue를 이용할 때와 Code를 이용할때 방법이 다릅니다. - 하위에서 상위로 데이터를 전달하는 방법 - 상위에서 하위로 데이터를 전달하는 방법 1. Code를 이용할 때 2. Segue를 이용할 때 1. Code를 이용할 때 상위 // 상위 ViewController class ViewController: UIViewController, SendDataDelegate { @IBAction func "누르면 이동할 버튼"(_ sender: UIButton) { // 스토리보드에서 이름 붙이고 이름을 가져옴 guard let viewController = self.storyboard? .instan..

iOS/UIKit 2022.01.31

[IOS] 화면(ViewController)간 데이터 주고 받기 1 하위->상위

화면은 서로 데이터를 주고 받을 수 있어야 합니다. 원래 뷰 컨트롤러 -> 이동할 뷰 컨트롤러를 '상위' -> '하위'로 표현하겠습니다. - 하위에서 상위로 데이터를 전달하는 방법 - 상위에서 하위로 데이터를 전달하는 방법 1. Code를 이용할 때 2. Sugue를 이용할 때 하위에서 상위로 데이터를 전달하는 방법 Present를 예로 들었지만 Push도 동일하게 사용할 수 있습니다. 하위 뷰에서 상위 뷰로 데이터를 전달할 때는 delegate 패턴이라는 것을 사용합니다. 1. 상위 뷰에 프로토콜 선언(원하는 기능을 넣으면 되는데 여기서는 기본 데이터 전달을 하겠습니다.) 2. 하위 뷰에 원하는 함수 정의 3. 하위 뷰의 프로퍼티에 자기 자신을 전달하기() protocol을 이용하는데 이는 어디에 선언..

iOS/UIKit 2022.01.31

[IOS] View life cycle (라이프 사이클)

처음에 웹을 공부할 때 라이프사이클에 대해 조금만 하고 넘어간 적이 있는데 나중에 사용하다 보니 이 라이프사이클을 잘 아는게 작동하는데 매우 중요한 요소라는 것을 알았습니다. 마찬가지로 IOS를 처음 공부하는 지금 분명하게 짚고 넘어가는 것이 좋을 것 같습니다. Swift의 라이프사이클 메서드의 이름은 직관적입니다. 다음은 print()를 override에 추가해 콘솔에 라이프 사이클을 찍어볼 수 있도록 하였습니다. class ViewController: UIViewController { // 뷰가 처음 로드될 때 실행 override func viewDidLoad() { super.viewDidLoad() print("뷰 로드") } // 뷰가 화면에 나타나기 전에 실행됨 override func vi..

iOS/UIKit 2022.01.30