일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- App Store Connect
- addannotation
- dispatchsource
- Timer
- SwiftUI Boolean 값
- weak var
- font book
- Xcode
- 러닝기록앱
- Required Reason API
- Protocol
- WeatherManager
- weatherKit
- UIAlertAction
- MKMapViewDelegate
- 영문 개인정보처리방침
- 단일 책임원칙
- swift
- 서체관리자
- xcode로 날씨앱 만들기
- 클로저의 캡슐화
- 러닝타이머
- CLLocationManagerDelegate
- MKMapItem
- UICollectionViewFlowLayout
- CoreLocation
- 한국어 개인정보처리방침
- AnyObject
- Startign Assignments
- RunningTimer
- Today
- Total
목록Whale life (215)
VesselWheel
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.제한 조건 n은 10,000,000,000이하인 자연수입니다. func solution(_ n:Int64) -> [Int] { var temp: Int64 = 0 // 파라미터 초기화 var i: Int64 = 0 // 파라미터 초기화 var array = Array() // // 파라미터 array 배열 저장시 Int 타입배열로 초기값은 빈배열 guard (n > 10000000000 && n
Description 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 조건 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다. func solution(_ x: Int, _ n: Int) -> [Int] { var result: [Int] = [] //결과값은 list guard x >= -10_000_000 && x
맥os SQLite 설치 방법 안드로이드나 ios 개발할 때 sqlite를 많이 쓰는데요 안드로이드나 애플에서 앱 개발시 공식적으로 sqlite를 지원하고 있습니다 오늘은 MacOS에 sqlite3 를 설치하는 방법에 대해서 알아볼게요 sqlite는 sql + light 로 sql 의 기능들을 경량화하여 기능들을 뺀 것들이 있습니다 그 점을 감안하시고 설치해주세요 % brew install sqlite3 brew install sqlite3 맥에서는 리눅스의 yum, apt 를 대신해서 brew를 사용합니다 보통 맥에서는 기본으로 sqlite가 설치되어 있어 already installed 라고 이미 설치되어 있다고 알려줄거예요, 이미 설치 되어 있으신 분은 % brew upgrade sqlite 위 명..
https://velog.io/@ryan-son/VaporSwift-Vapor를-이용하여-서버-구성하기 [Vapor/Swift] Vapor를 이용하여 서버 구성하기 Swift로 작성된 웹 프레임워크인 Vapor를 이용하여 서버를 구성하고 Heroku를 통해 배포하는 과정을 다룹니다. velog.io 이번에는 Swift로 작성된 웹 프레임워크인 Vapor를 이용하여 서버를 구성하고 Heroku를 통해 배포하는 과정을 다루어 보겠습니다. 본 포스팅은 macOS를 기준으로 작성되었습니다. Vapor 설치 Vapor를 이용하기 위해서는 다음과 같은 요구사항이 만족되어야 합니다. Xcode 11.4 이상 Swift 5.2 이상 Xcode 버전 확인 Xcode가 설치되어 있지 않으시다면 App Store를 통해 설..
import UIKit // assert / guard /* assert (검증) : code 가 통과되는지 중단되는지 검사함 guard (보호) - Early Exit (이른 탈출) */ // assert var number1: Int = 10 // 10 이면 통과 아니면 중단하기 assert(number1 == 10 , "numbe1 이 10이 아닙니다") print("number1 이 10 이라서 통과함") print("number1 :",number1) // assert(number1 == 12 , "numbe1 이 12가 아닙니다") // Assertion failed: numbe1 이 12가 아닙니다 // print("number1 이 12 이라서 통과함") // print("number1 :..
import UIKit /* Generic 주로 Collection(Array)에서 저장할 type을 하나로 통일할 때 사용함 - 클래스, 구조체, 열거형, 함수 등에서 사용함 */ // Calculation1 의 객체를 생성할 때는 Int type 만 지정할 수 있음 struct Calculation1{ var param1: Int init(param: Int){ self.param1 = param } } var calc1 = Calculation1(param: 10) // var calc2 = Calculation1(param: "10") // Calculation2 의 객체를 생성할 때는 아무 type이나 다 지정할 수 있음 // (Generic)부분을 type parameter 라고도 함 stru..
import UIKit /* Extension (확장 - (추가)) 처음 작성한 클래스의 내용(멤버변수(속성), 멤버메소드(기능))을 추가함 ㄴ 클래스, 구조체, 열거형, 기본자료형 overriding: 부모클래스에서 물려받은 메소드를 재정의함 overloading: 같은 클래스 안에서 같은 이름의 메소드의 매개변수부를 다르게 해서 구분함 extension: 다른 이름의 메소드를 추가하는 것 상속(inheritance: 확장) 추가(extension) 클래스에서만 가능함 클래스, 구조체, 열거형, 기본자료형 등에서 사용 overriding 이 가능 overriding 은 안 되고 새롭게 추가만 가능 */ // 속성 추가 // isEven 과 isOdd 는 원래 Int type 에 없는데, 추가함 exte..
import UIKit // 형변환 : Type Casting let intNum: Int = 10 let floatNum: Float = 3.64 let str1: String = "1234" // Int -> Double let doubleNum: Double = Double(intNum) print("intNum :",intNum) print("doubleNum :",doubleNum) // Float -> Int: 소숫점 이하가 표현 안 되고, 반올림도 안 됨 let intNum2: Int = Int(floatNum) print("floatNum :",floatNum) print("intNum2 :",intNum2) // Int -> String let strNum: String = String(..
import UIKit /* 형변환 : (data) type casting */ let intNum: Int = 10 let floatNum: Float = 3.14 let strNum: String = "1234" // Int -> Double let doubleNum: Double = Double(intNum) // Float -> Int let intNum2: Int = Int(floatNum) // Int -> String let strNum2: String = String(intNum) // String -> Int : 정수모양의 문자만 문자열로 형변환 가능함 // Value of optional type 'Int?' must be unwrapped to a value of type 'Int' ..
import UIKit /* protocol 가상함수 : 선언부만 있고 구현부(몸통:body) 가 없는 함수 (cf.추상메소드) 본체 특징 : 다중 상속이 가능함 여러 protocol을 한 번에 상속(확장)할 수 있음 */ // property : get, set protocol Talkable{ var lang: String{get} // 읽기 var topic: String{get set} // 읽고 씀 // 가상함수: 선언부만 있고 body가 없는 함수 func talk() } protocol Runnable{ func run() } // Person은 두 개의 protocol을 다중상속하고 있음 struct Person: Talkable, Runnable{ var lang: String // pr..
import UIKit /* Optional Chainnig () Nil 체크를 보다 편리하게 함 Optional Binding : if let 강제 unwrapping : ! 연산자 사용 이른 탈출(복귀) : guard let, guard else Optional 형변환 : as? - Nil 이 아닌 경우에만 형변환함 Optinonal 기본값 : ?? "기본값" */ class Person{ var objContact: Contact? // 생성자 함수에서 초기화하기 init(){ self.objContact = Contact() } } class Contact{ // 연락처 var name: String? var phone: String? var email: String = "010-1234-5678..
import UIKit /* 구조체(struct) 열거형(enum) 클래스(class) 값type 값type 참조type 상속 X X O extension O O O */ // 구조체 struct Student{ var name: String = "더조은" var age : Int = 30 func displayName(){ print(self.name) } } // 구조체 객체 생성하기 : new 를 사용하지 않음 var std1: Student = Student(); dump(std1) // 멤버변수와 멤버함수에 접근하기 print(std1.name) print(std1.age) std1.displayName() // 구조체의 값 복사하기: 할당연산자 let std2 = std1 dump(std2) ..
import UIKit /* 열거형 : Enum(Enumeration) Swift 의 열거형은 함수도 넣을 수 있음 */ enum Weekday{ case mon case tue case wed case thu case fri, sat, sun } var day: Weekday = Weekday.mon print("day : \(day)") day = Weekday.sat print("day : \(day)") // type 추론: 열거형의 type 을 생략할 수 있음 day = .fri print("day : \(day)") // switch 조건문과 연동해서 사용하기 switch day{ case .mon, .tue, .wed, .thu: print("월화수목") case .fri, .sat: pri..
import UIKit /* 튜플: Tuple 간단하게 사용하고 버리는 용도 형식 : () 사용 - (값1, 값2, 값3, 값4, 값5, ...) (이름1:값1, 이름2:값2, 이름3:값3) 함수에서 여러 개의 값을 한꺼번에 return 하는 경우 ㄴ 여러 개의 값을 tuple 에 저장해서 반환함 */ var tp1 = ("이율곡", 18, 178.7) print(tp1.0) print(tp1.1) print(tp1.2) // unpacking var (name, age, height) = ("이율곡", 18, 178.7) (name, age, height) = tp1 print("name : \(name)") print("age : \(age)") print("height : \(height)") le..
import UIKit struct Student{ var name = "tjoeun" var age = 21 func test1(){ print("test1() 호출") } } // 구조체 배열 var studentArr: [Student] = [] var std1 = Student() var std2 = Student() std1.name = "이순신" std1.age = 46 std2.name = "안중근" std2.age = 30 studentArr.append(std1) studentArr.append(std2) for student in studentArr{ print(student.name) print(student.age) student.test1() } print("------------..
import UIKit // 일반함수 func calculate(n1: Int, n2: Int, test1:(Int, Int)->Int) -> Int{ return(n1 + n2) } // 클로저의 변형된 형태 // 실행시 code block(클로저)을 바로 선언하는 형태 var result = calculate(n1:10, n2: 20, test1:{ (n1: Int, n2: Int) -> Int in return n1 + n2 }) print("result : \(result)") // type 추론을 이용해서 return type 을 생략하는 형태 result = calculate(n1: 11, n2: 22, test1: { (n1: Int, n2: Int) /* -> Int */ in return..
/* 클로저(Closure): Code Block code block 을 변수에 할당할 수도 있고 매개변수(parameter)로 전달할 수도 있고 실행할 수도 있음 통신: 요청(request)과 응답(response)처리 UI이벤트: ex) click 이벤트 발생할 때 실행됨 클로저 만드는 방법(형식) { (parameter: type) -> return type in 실행 code (statement) } */ // 일반 변수 var number: Int = 11 // 일반 함수 func add(n1:Int, n2:Int) -> Int{ return n1 + n2 } print("add(n1:11, n2:22) : \(add(n1:11, n2:22))") // 클로저 : code block 을 만듬 v..
import UIKit /* Collection : Array(배열), List Dictionary, Set Array(배열) - 같은 type 의 data 를 여러 개 저장함 index 가 있음 (순서가 있음) Int 배열, String 배열, 구조체 배열, 클래스(객체) 배열 List - cf. ArrayList (in Java) ㄴ 배열(Array)과 비슷하나, 서로 다른 type 의 data 를 여러 개 저장할 수 있음 */ var arr1: Array = Array() var arr2: Array = [] //
기본적인 맥 단축키 커맨드 + A : 전체 선택 커맨드 + Z : 되돌리기 커맨드 + X : 자르기 커맨드 + C : 복사 커맨드 + V : 붙여넣기 커맨드 + BackSpace : 해당 라인 지우기 커맨드 + 방향키 : 해당 방향의 끝으로 이동 커맨드 + Up : 해당 창 가장 위로 = Home 키도 동일하게 작동합니다. 커맨드 + Down : 해당 창 가장 아래로 = End 키도 동일하게 작동합니다. 커맨드 + Left : 선택된 텍스트라인 가장 왼쪽으로 커맨드 + Right : 선택된 텍스트라인 가장 오른쪽으로 컨트롤 + 좌/우 : 페이지 변경 커맨드 + Shift + 4 : 선택한 화면 영역 캡쳐 커맨드 + Space : 언어 변환 커맨드 + Space, 커맨드 누른채로 Space 연타 시 다음 ..
Cocoa Pod 사용법과 터미널 내용 터미널창에서 실행함 1) 기본 프로젝트 닫음 2) 파인더에서 프로젝트폴더 오른쪽 클릭하고 현재 폴더에서 새로운 터미널 열기 3) Cocoa Pod 유틸 설치하기 a. sudo gem install cocoapods 입력하고 엔터 안 되면 sudo gem install cocoapods -v 1.8.4 입력하고 엔터 b. Cocoa Pod 업데이트하기 pod repo update 입력하고 엔터 4) 프로젝트 초기화하기 : pod init 5) 라이브러리 설치하기 : pod install 6) 프로젝트 열기 workspace 열기 : open ex12.xcworkspace 7) Xcode 에서 pod 파일 편집 pod 'AlertToast' pod 'SDWebImage..
import SwiftUI struct ContentView: View { @State private var username: String = "" @State private var isPrivate: Bool = true @State private var notifications: Bool = false @State private var previewIndex = 0 let previewOptions: Array = ["Always", "When Unlocked", "Never"] var body: some View { /* Form{ TextField("Username", text: self.$username) Toggle(isOn: self.$isPrivate){ Text("Private Accou..
import SwiftUI struct ContentView: View { var body: some View { Form{ VStack { ScrollView(){ VStack{ ForEach(1 ..< 31 ){ index in Text("Count : \(index)") .font(.largeTitle) } } // .infinity : VStack 이 가지는 최대한 너비 // ㄴ 화면 너비 .frame(maxWidth: .infinity) } .frame(height: 200) .background(.orange) Divider() ScrollView(.horizontal, showsIndicators: false){ HStack{ ForEach(1 ..< 31 ){ index in Text("C..
// ContentView.swift // ex11 // // Created by tjoeun on 2023/04/15. // import SwiftUI struct ContentView: View { @State private var nameIdx = 0 var names = ["paul", "peter", "david", "james", "john"] var body: some View { VStack{ NavigationView{ Form{ Section{ Picker(selection: self.$nameIdx, label: Text("Names")){ // ForEach(0 ..< names.count) ForEach(0 ..< 5){ index in Text(self.names[index])...
import SwiftUI struct ContentView: View { @State private var count: Float = 0 @State private var age: Float = 0 var body: some View { VStack { Form{ Slider(value: self.$count, in: 1...10){ Text("Count") } Text("Count : \(Int(self.count))") Slider(value: self.$age, in: 0...100){ Text("Age") } Text("Age : \(Int(self.age))") } } } } struct ContentView_Previews: PreviewProvider { static var previews..
import SwiftUI struct ContentView: View { @State private var count: Int = 0 @State private var age: Int = 0 func incrementStepper(){ print("incrementStepper") self.age += 1 } func decrementStepper(){ print("decrementStepper") self.age -= 1 } var body: some View { Form{ VStack { Stepper(value: self.$count, in: 0...10){ Text("Count") } Text("Count : \(self.count)") // Event 체크하기 Stepper(onIncremen..
import SwiftUI struct ContentView: View { @State private var email: String = "" @State private var passwd: String = "" var body: some View { VStack { VStack{ TextField("이메일", text: self.$email) Divider() SecureField("비밀번호", text: self.$passwd) } Divider() Text("입력된 이메일 : \(self.email)") Text("입력된 비밀번호 : \(self.passwd)") // Form View : 컨트롤이나 뷰를 꾸며주는 객체 Form{ VStack{ TextField("이메일", text: self.$e..
import SwiftUI struct ContentView: View { // State 변수 : 컨트롤뷰와 변수 사이에서 data 를 공유하는 변수 @State private var isToggleOn = false var body: some View { VStack{ // 상태변수를 등록할 때, self.$ 를 붙여줌 Toggle(isOn: self.$isToggleOn){ Text("Toggle") } .frame(width:110) Divider() if self.isToggleOn == true{ Text("Toggle On") }else{ Text("Toggle Off") } Divider() Toggle(isOn: self.$isToggleOn){ Text("Toggle") } .frame..
// // ViewController.swift // lecture 09 MapView // // Created by Jason Yang on 10/17/23. // import UIKit import MapKit class ViewController: UIViewController, CLLocationManagerDelegate { // ㄴ 지도 보이기 delegate @IBOutlet var myMap: MKMapView! @IBOutlet var lbLocationInfo1: UILabel! @IBOutlet var lbLocationInfo2: UILabel! // let locationManager = CLLocationManager() // 지도 보이기 변수 let locationManager..
https://jojoldu.tistory.com/288