분류 전체보기
[Swift] 코테풀때 유용한 Input & Output 정리
INPUT 가장 기본적인 형태 readLine()은 return value가 옵셔널이기 때문에 force unwrapping을 해줘야 사용할 수가 있습니다 ❗️ let str = readLine()! Array로 받기 공백을 두고 문자열을 받는 경우에는 split을 통해 분리하여 저장할 수 있습니다. 💡 주의할 점 : split()한 데이터는 String이 아닌 Substring입니다. (엄연히 다른 type이라 error나는 경우가 있으니 알아두면 좋습니당) let arrString = readLine()!.split(separator: " ") Int로 받기 📌 숫자 하나만 입력받는 경우 let num = Int(readLine()!)! 📌 공백으로 구분하여 여러개를 입력받는 경우 type은 Arra..
[Swift] 백준 2941 : 크로아티아 알파벳
풀이 아주 간단하게 생각했다. 크로아티아 알파벳을 문자 하나로 보기때문에 크로아티아 알파벳과 일치하는 문자열을 하나의 문자(*)로 바꾸고 count한다. 코드 import Foundation var s = readLine()! let croatia = ["c=","c-","dz=","d-","lj","nj","s=","z="] for i in croatia { s = s.replacingOccurrences(of: i, with: "_") } print(s.count) 문자열에서 of: 와 일치하는 문자열을 두 with: 으로 바꿉니다. 그리고 그 문자열을 return 합니다. 즉, 기존 문자열을 참조하지 않고 새로운 문자열을 생성합니다.
디바이스 화면고정 portrait only
앱을 만들때 가로화면을 고려하지 않기 위해 landscape 모드를 지원하지 않는 방법입니다. UIKit로 구현하는 경우 (Storyboard) AppDelegate.swift에 코드를 추가합니다. func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { return UIInterfaceOrientationMask.portrait } SwiftUI로 구현하는 경우 디렉토리의 프로젝트를 누르고 TARGETS에 있는 프로젝트를 선택합니다. Info -> Supported interface orientations 여기서 지원하고자 하..
[SwiftUI] Grid속성
Grid의 속성에 대해서 자세히 알아보자. Grid의 종류 : LazyHGrid, LazyVGrid 속성 : fixed, flexible, adaptive LazyVGrid 데이터를 수직으로 나열하고자 할 때 사용합니다. 수직으로 나열하기 때문에 column을 사용합니다. column은 세로 한 줄을 의미합니다. var body: some View { LazyVGrid(columns: columns) { ForEach(0..
URLSession을 통해JSON 가져오기 (2)
SwiftUI 이 글은 alamofire와 같은 외부라이브러리를 사용하지 않는 아주 기초적인 방법입니다! mockapi.io에서 샘플을 만들면 아래와 같은 데이터를 생성해 줍니다. https://62bbeeb36b1401736cecefcf.mockapi.io/user 데이터는 다음과 같이 구성했습니다. struct User: Codable, Identifiable { var createdAt: String var name: String var avatar: String var id: String } json데이터를 가져오기 위해 메인으로 작성되는 class는 이 전 글과 동일합니다. 더보기 class network { func getJSON(completion : @escaping ([User]) ->..
URLSession을 통해JSON 가져오기 (1)
SwiftUI 이 글은 alamofire와 같은 외부라이브러리를 사용하지 않는 아주 기초적인 방법입니다! json data를 가져올 샘플링크: https://jsonplaceholder.typicode.com/todos 위 사이트에서 받을 json의 형태는 다음과 같다. Todo가 Codable, Identifiable 프로토콜을 채택해야 한다. 그 이유는 각각 Codable : JSONDecoder()에서 사용하기 위함 Identifiable : 데이터를 List에서 리스팅할 때 사용하기 위함 struct Todo: Codable, Identifiable { var userId: Int var id: Int var title: String var completed: Bool } network.swift..
Passing Data (직접전달방식)
데이터를 전달하는 여섯가지 방법을 알아보자 ! 1. instance property 데이터를 전달받을 ViewController 프로퍼티에 값을 전달하는 방법이다. 데이터를 전달받을 property를 선언하고, 그 property의 값을 UI에 적용하는 원리이다. 데이터를 전달받을 ViewController propertyDataViewController.swift var passingData = "" //여기에 데이터 전달받을 예정 @IBOutlet weak var setPassingData: UILabel! //여기에 전달받은 데이터 적용 override func viewDidLoad() { super.viewDidLoad() setPassingData.text = passingData } 데이터를 ..
Auto Layout 1 [Why?]
📍 Auto Layout 이란 ? 제약조건(Constraints)에 따라 모든 뷰의 크기와 위치를 동적으로 지정하는 것 이게 왜 필요한지? 를 이해하기 위해서는 Frame-Base Layout에 대한 사전 지식이 필요하다. Frame-Base Layout Xcode 상에서 이미지 View의 크기와 위치를 위와 같이 지정하고 Simulator로 실행시켜보자. (review화면을 iPhone11로 하고, 파란 점선 표시가 뜨는 중간으로 위치를 지정했음) 실행하면 iPhone11은 예쁘게 정중앙에 적당한 크기로 이미지가 배치된다. 하지만 SE같은 경우에는 중앙에 배치 되지 않고 위치가 애매하다. 그러면 이번에는 landscape(가로모드) 로 돌려 보자 ❓ 이미지가 실종됐다. 이유는, 처음에 x와 y의 값을..
[Swfit] 프로퍼티 감시자 / property observer (willSet & didSet)
Property Observer 프로퍼티 값의 변화를 관찰하고, 저장 프로퍼티에 추가할 수 있다. willSet, didSet으로 프로퍼티의 값 변화할 때 호출됨 -> 값의 변화를 모니터링 할 수 있다. 📌 왜, 언제 사용하는지 ? 주로 iOS개발에서 UI를 업데이트 할 때 사용합니다. willSet 값이 저장되기 직전에 호출됩니다. willSet의 파라미터는 바뀌게 될 변수의 값을 가지고 있습니다. var fruit : String = "apple" { willSet(newFruit){ print("과일이 \(fruit)에서 \(newFruit)으로 변경됩니다.") } } 파라미터를 설정하지 않을 경우 newValue로 자동 지정 됩니다. var fruit : String = "apple" { will..
[Stanford iOS] enum의 위대함
powerful 한 enum을 정리해보자. (본 정리 내용은 Stanford iOS를 바탕으로 합니다.) enum에 대한 기본적인 내용은 아래 링크를 참조해 주세요. [Swift] 열거형(Enumerations) 열거형이란 ? 공통된 주제를 가진 데이터들을 모아 나타내는 자료형이라고 생각하면 된다. 예를들어 내가 프로그래밍 할 내용이 과일에 관한 것이고 앞으로 과일 변수를 자주 사용한다고 생각 990427.tistory.com 우리는 계산기 operation 구현을 위해서 다음과 같이 열거형 변수를 만들었다. 여기서 associated value를 사용하여 다양한 type의 케이스를 사용할 수 있고, value를 지정할 수 있다. 아래 operation 딕셔너리를 보면, value가 associated ..