본문 바로가기

MAC

(11)
[Swift_Grammar] Property 프로퍼티의 종류에 대해서 알아보겠다. 저장 프로퍼티 첫번째로 볼것은 저장 프로퍼티다. let과 var를 사용하여 클래스 또는 구조체의 인스턴스와 연관된 값을 저장하는 가장 단순한 개념의 프로퍼티이다. 구조체에서는 저장 프로퍼티의 초깃값이 없고 옵셔널한 값이 아니어도 저장 프로퍼티를 모두 포함하는 이니셜라이저를 제공해준다. 하지만 클래스에서는 초깃값이 없고 옵셔널한 값도 아닌 저장 프로퍼티의 존재를 허용하지 않는다. 그리하여 옵셔널한 타입으로 지정해서 기본값을 nil로 설정해주던지 아니면 해당타입의 값으로 기본값 설정을 해주던지 사용자정의 이니셜라이저를 사용해서 초기화 시점에서 기본값을 설정해주던지 해야한다. struct Music { let artist: String var like: Int } clas..
[SwiftUI] Image (1) SwiftUI에서 Image 사용법에 대해 알아보겠다. UIKit에서 쓰이던 UIImageView를 대체할 수 있는 녀석이다. 일단 에셋에 image 하나를 넣어주겠다. ( image이름 - "swiftui" ) 그리고 아래와 같이 body 안에 코드를 입력하면 끝이다. UIImageView에 UIImage를 넣어주고 하는 과정이 한줄의 코드로 가능한것이다. var body: some View { Image("swiftui") } 여기서 주의사항은 image는 기본적으로 image 본연의 사이즈를 유지한다는 점이다. 이게 무슨말이냐 하면 image 파일을 열어서 사이즈를 확인해보면 해당 image의 사이즈를 알 수 있는데 그사이즈를 유지하고 있다는 말이다. 이말은 곧 frame이라는 수식어를 사용해서 i..
[Swift_Grammar] Optional 오늘은 Optional에 대해서 포스팅 하겠다. Optional은 값이 있을 수도, 없을 수도 있음을 나타내는 표현이다. ( 없는건 nil로 표현한다. ) 변수나 상수 등에 꼭 값이 있다는 것을 보장할 수 없으며 그 값이 nil 일 수도 있다는걸 의미한다. Int 타입 변수에 값이 0, 혹은 String 타입 변수에 값이 "" (빈 문자열) 이라고 가정할때 이 상황에서 해당 변수들의 값은 없는게 아니다. 단지 0이라는 값이 들어간, 빈 문자열 이라는 값이 들어간 변수 또는 상수인것이다. 그러니 nil 이라는 값과 혼동을 해서는 안된다. let value1 = 0 let value2 = "" nil은 Optional 타입에만 할당을 할 수 있다. 일반 타입에 nil을 할당 하고자 한다면 컴파일 에러가 발생..
[SwiftUI] Text 이번 포스팅에는 SwiftUI에서 사용되는 Text에 대해서 알아보겠다. UILabel 보다 사용성이 훨씬 크고 UILabel 과 일맥상통 하다고 말하면 뭔가 이해하기 쉬울까 그전에 우리가 익숙해 있었던 UIKit와 SwiftUI 요소들의 비교를 몇개 먼저 해보자면 아래와 같다. Views and Control UILabel Text UITextField TextField UITextField의 Secure 설정 SecureField ( TF의 속성을 설정하는게 아닌 새로운 TF 생성 ) UIButton Button UIImageView Image UISwitch Toggle UISlider Slider UIStepper ( 이런게 있었네요,, ) Stepper UIPickerView Picker(Whe..
[SwiftUI] Hello SwiftUI SwiftUI에 대해서 공부를 시작하려고 한다. "스윗한 SwiftUI" 라는 책을 베이스로 공부하되 추가적으로 필요한 부분이 있을시 검색을 해나가면서 진행하는 방향으로 공부할 생각이다. 일단 첫 시작이니 프로젝트 생성부터 하겠다. App을 선택하고 Interface를 SwifttUI로 선택한다. 그러면 평소 기본으로 위치해있던 ViewController가 아닌 ContentView라는 이름의 swift 파일이 있을것이다. SwiftUI에서는 ViewController를 사용하지 않는다. 대신 "View 프로토콜을 준수하는 구조체를 사용해서 body라는 프로퍼티에 UI를 구성하는 코드를 작성" 하여 구현 한다고 한다. 일단 ContentView에 기본으로 작성된 코드를 보면 "Hello, world!"라..
[IOS] 키보드 내리기 with TextField SearchBar나 TextField에서 터치 입력이 발생하면 키보드가 올라온다. 이번 포스팅에서는 키보드가 올라온 후에 키보드가 아닌 다른 영역을 터치 해서 키보드를 내리거나 혹은 키보드위에 ToolBar를 올리고 키보드를 내리는 BarButton을 하나 생성하여 BarButton에 Action을 넣은후 진행하는 방법에 대해 얘기해보겠다. 일단 center에 TextField를 하나 생성하겠다. 먼저 아래와 같은 코드를 작성해주자. override func touchesBegan(_ touches: Set, with event: UIEvent?){ self.view.endEditing(true) } 이 touchesBegan 메소드의 대해 알아보자. View 또는 Window에서 하나 이상의 새로운 터..
[Swift_Grammar] 흐름 제어 (1) 코드를 실행해야 하거나 실행하지 말아야 하는 상황, 혹은 특정 명령어를 반복해서 실행해야 할때 조건문과 반복문 즉 흐름 제어를 하게 된다. 조건문은 if문 과 switch문, guard문 이 있다. if 먼저 if문은 if, else 등의 키워드로 사용할 수 있고 else if는 몇개를 사용해도 상관 없으며 else 블록은 생략해도 무방하다. 먼저 오는 조건중 어느 하나라도 충족이 되었다면 다음 조건들의 코드들은 무시한다. 또한 조건의 값은 Bool 타입이어야 한다. let lhs = 5 let rhs = 6 if lhs rhs { print("lhs의 값이 더 크다") } let value = false if value ..
[Swift_Library] CocoaPod 설치 외부 라이브러리를 사용하기 위한 도구중 하나인 CocoaPod의 설치 방법을 포스팅 하려 한다. 터미널에서 아래와 같이 입력후 암호를 입력하면된다. sudo gem install cocoapods // 자신의 맥에 CocoaPod이 설치되어 있다면 Skip해도 된다. 설치된 CocoaPod의 버전을 확인 하려면 아래와 같이 입력을 한다. pod --version 이제 라이브러리를 추가할 프로젝트의 경로로 들어가서 pod init을 해준다. pod init 그러면 podFile이라는게 생기는데 아래와 같이 podFile을 열어서 원하는 pod의 install 명을 입렵하면 된다. # Uncomment the next line to define a global platform for your project ..
[IOS] 이미지와 라벨을 같이 사용한 NavigationBarButtonItem 대부분의 앱들이 네비게이션바에 설정 버튼을 위치해두면서 자신의 프로필이나 앱의 환경설정으로 접근할 수 있게 해놓는다. 필자 또한 프로젝트중에 BarButton을 생성하여 작업하는 과정이 있었고 버튼의 이미지 옆에 text를 붙이는 과정을 포스팅으로 남기려한다. 보통은 간단하게 SystemItem으로 진행하거나, navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(didTapRightBarButton)) systemImage 로 진행 할수 있다. navigationItem.rightBarButtonItem = UIBarButtonItem(image: UII..
[IOS] User Event & MainRunLoop 프로젝트를 진행하는데 MainRunLoop에 관여하는 부분에 있어 버그가 발생했고 이부분에 대해서 포스팅 하려 한다. 버그 발생 부분과 MainRunLoop에 대해서 알아보기 전에 선행으로 AppLifeCycle에 부분적으로 먼저 알고 가보도록 하겠다. 일단 사용자가 앱의 아이콘을 터치했을때 ( 앱을 시작할때 ) C언어 기반의 프로젝트는 main이라는 함수의 호출이 곧 앱의 시작이 된다. IOS의 앱 또한 Object-C 기반임으로 main함수가 호출이 된다. 다만 UIKit framework에서 main함수를 관리 하기 때문에 개발자는 따로 main에 관여해주지 않아도 된다. 그리고 UIKit framework에서 main을 호출 하면서 UIApplicationMain 함수를 호출 하는데이 과정을 통해..