iOS/Swift 40

[iOS] SwiftLint 사용

코드 컨벤션을 지키기 위해 추가로 SwiftLint를 사용해보려 합니다. 먼저 SwiftLint github입니다. GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions. A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub. github.com 한국어 버전의 README도 있습니다. GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions. A tool to enforce Swift style ..

iOS/Swift 2022.10.23

[Swift] protocol에 대하여(개념 정리)

프로토콜을 다시 보면서 제대로 사용해야겠다는 생각이 들어 요점을 정리해보려 합니다. iOS개발을 하면서 프로토콜은 정말 많이 사용됩니다. 특히 delegate 패턴에서도 아주 많이 보이는 유형입니다. 자바를 해보신 분이라면 스위프트의 프로토콜은 자바의 인터페이스와 아주 유사하다고 할 수 있겠습니다. 프로토콜 protocol 프로토콜을 만들고 정의하는 기본 틀입니다. protocol { // 명세들 } 프로토콜을 구현할 수 있는 구현체는 다음과 같습니다. 구조체 2. 클래스 3. 열거형 4. 익스텐션 struct,class,enum,extension 객체:protocol {} 프로토콜 프로퍼티 저장 프로퍼티와 연산 프로퍼티 프로토콜 (차이점 주의) 다음은 프로토콜에서 프로퍼티를 명세하는 부분인데 get과 ..

iOS/Swift 2022.06.30

[Swift] PS에 유용하게 사용할 것들 정리

IDE를 사용하지 않고 PS문제를 푸는 연습을 하는 중입니다. Swift는 parameter 이름도 method에 써줘야해서 조금 까다롭습니다. 물론 구현해서 써도 되지만 너무 기본적인 것도 전부 구현하면 코드 길이와 시간이 비약적으로 늘어나기에.. 정리해보려 합니다. 일단 쭉 써놓고 코테가 끝나면 String, Array 등 확실히 정리해서 구분해보는걸로! pow(_ p1: Double, _p2: Double) - p1의 p2승 - 양쪽을 float이나 double로 써줘야한다. 리터럴은 타입캐스팅 해주는듯 하지만.. 변수는 에러 (숫자라면 소수점 3.0 / 변수라면 Double() 사용) var a: Int = 3 var result: Double = pow(2.0, 3); // 8 var resul..

iOS/Swift 2022.06.23

[Swift] 클로저(closure) 축약 정리

PS를 하면서 고차함수를 사용하는데 클로저를 다시 한 번 정리할 필요가 있다고 생각이 들었습니다. 원리는 모두 같음으로 reduce를 가지고 정리해 보겠습니다. 축약의 원리는 추론입니다. 클로저가 들어가는 함수에서 타입이 정의되어 있음으로 return과 parameter의 타입의 생략이 가능하고 클로저 in 뒤에는 return이 수반됨으로 생략이 가능합니다. 또한 클로저가 마지막에 오면 후행 클로저로 뒤로 빼서 연산이 가능합니다. 파라미터는 순서대로 $0, $1, $2 등 달러사인을 붙여 사용이 가능합니다. 문법을 공부하며 짧은게 좋다고 막 사용할게 아니라 이해하고 사용하도록 해야겠습니다. let a: [Int] = [1,2,3] // 아래 값은 모두 6 a.reduce(0, {(v1:Int,v2:Int..

iOS/Swift 2022.05.29

[Swift] 구문 레이블 (for문 중첩 제어)

중첩된 for문을 처리할 때 불편한 점이 하위 for문에서 상위 for문을 중단시키기 위해선 변수도 더 선언해야 한다는 문제가 있었습니다. 근데 알고 보니 스위프트에는 좋은 기능이 있었는데 바로 "구문 레이블"입니다. 말 그대로 구문에 이름을 붙여 break나 continue 시킬 수 있는 기능입니다. 기본 문법은 이러합니다. 이름(레이블): { //code... } 코드를 보면 바로 이해가 되니 바로 예제를 보면 a for문이 있고 b for문을 만들었습니다. 그리고 b에서 j가 3이면 b를 포함해 a까지 break 되는 구문입니다. a: for i in 0...5 { print("i: \(i)") b: for j in 0...5 { if j == 3 {break a} print("j: \(j)") }..

iOS/Swift 2022.04.02

[iOS] API 사용시 url에 한글을 사용할 수 없는 문제

url을 사용할 때에 한글을 사용하면 깨진다는 사실을 모르고 decoding만 한참 들여다 봤습니다... 브라우저에 붙여넣거나 포스트맨으로 실행하더라도 분명 응답이 잘 되는데 어디가 문제인지 몰랐는데 url에 한글을 그대로 사용하면 문제가 생긴다는 점을 알았습니다. 해결방법은 생각보다 간단했습니다. 다음은 alamofire를 사용해 데이터를 받아오는 예제입니다. AF.request("여기에 url 입력".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "") // 여기가 중요!! .responseDecodable(of: "decodable 모델") { response in guard case .success(let data) = res..

iOS/Swift 2022.03.25

[Swift] 10진수를 2진수로 변환하는 방법

저는 10진수를 2진수로 변환할 때 2로 나누고 나머지를 계산하는 방법을 구현했습니다. 그런데 알고 보니 더 좋은 방법이 있어서 정리합니다. 10 진수애 서 2진수로 변환 import UIKit let decimalNumber: Int = 10 let binaryNumber: String = String(decimalNumber, radix: 2) // 1010(2진수) 변환에 String이 사용되었는데 굳이 Int가 필요하면 다음과 같이 다시 변환해 주면 되긴 합니다. (아직까진 쓸 일이 있을진 모르겠습니다.) import UIKit let decimalNumber: Int = 10 let binaryNumber: Int = Int(String(decimalNumber, radix: 2))! // 10..

iOS/Swift 2022.03.15

[Swift] String 문자열에서 문자 접근하기

Swift에서 String은 0, 1, 2 같은 index로 접근할 수가 없습니다.. 그래서 다른 방법을 이용해야 하는데 그 방법을 정리해 보겠습니다. 인덱스 처럼 사용하기 let aaa:String = "012345" // String 문자열 aaa[aaa.startIndex] // 시작 인덱스로 "0"입니다. // startIndex와 반대로 endIndex도 있습니다. let n: Int = 2 aaa[aaa.index(aaa.startIndex, offsetBy: n)] // n이 2 임으로 "2"를 나타냅니다. 간단하게 aaa[2] 이런식으로 접근하면 좋을텐데 offsetBy를 지정해주어야 하는 단점이 있습니다. 그래도 list() indices 이용하기 - indices 는 index의 복수형..

iOS/Swift 2022.03.15

[iOS] plist 데이터 불러와서 사용하기

iOS에는 plist라는 독특한 파일이 있습니다. 사실 JSON과 비슷하다고 생각되는 파일입니다. 이 파일을 읽어와 사용하는 방법을 다뤄보겠습니다. 일단 과정은 URLSession으로 json을 받아와 decoding 하는 과정과 유사합니다. 1. plist 구조의 struct를 만든다. 2. Plist 파일의 url을 가져온다. 3. Plist 파일을 Data화 한다. 4. Data를 decoding 한다. 1. struct 만들기 plist파일을 보고 struct를 만듭니다. // 예시 struct ex { let a: String let b: String let c: Bool } 나머지 과정은 한번에 진행하도록 하겠습니다. 2. Plist 파일의 url을 가져온다. 3. Plist 파일을 Data화..

iOS/Swift 2022.02.24

[iOS] URLSession으로 get method 사용

서버와 데이터를 주고받기 위해서 http 통신을 사용합니다. 보통 가장 많이 사용되는 get을 사용하는 방법을 알아보도록 하겠습니다. // 요청할 url 작성 let url = URL(string: "요청할 url") // request 만들기 + method 정해주기 var request = URLRequest(url: url) request.httpMethod = "GET" // dataTask 만들기 let dataTask = URLSession.shared.dataTask(with: url) {[weak self] data, response, error in guard let self = self else {return} // 강한 순환 참조 방지 guard error == nil else {re..

iOS/Swift 2022.02.22