일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Protocol
- 러닝타이머
- RunningTimer
- font book
- addannotation
- swift
- Startign Assignments
- CoreLocation
- 단일 책임원칙
- SwiftUI Boolean 값
- weak var
- 서체관리자
- 영문 개인정보처리방침
- Timer
- 클로저의 캡슐화
- MKMapItem
- xcode로 날씨앱 만들기
- UICollectionViewFlowLayout
- Required Reason API
- WeatherManager
- 한국어 개인정보처리방침
- AnyObject
- Xcode
- 러닝기록앱
- dispatchsource
- App Store Connect
- UIAlertAction
- MKMapViewDelegate
- weatherKit
- CLLocationManagerDelegate
- Today
- Total
목록Xcode Study (162)
VesselWheel
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 = [] //
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
// ContentView.swift // ex06 // // Created by tjoeun on 2023/04/15. // import SwiftUI struct ContentView: View { func play(){ print("play function 호출됨") } var body: some View { VStack{ Button(action: { print("Button1-Clicked") }){ Text("Button1") .padding() .background(Color.pink) .foregroundColor(Color.white) .font(.largeTitle) } Divider() Button(action: { print("Button2-Clicked") }){ Text("But..
// ContentView.swift // ex05 // // Created by tjoeun on 2023/04/15. // import SwiftUI struct ContentView: View { var body: some View { VStack{ Image("image01") .resizable() // .scaledToFit() // .aspectRatio(contentMode: .fill) .aspectRatio(contentMode: .fit) .border(Color.black) Divider() // scaledToFit: 이미지의 가로나 세로가 긴 쪽이 프레임의 테두리(border)에 닿으면 크기가 정해짐 Image("image02") .resizable() .scaledToFit()..
// // ContentView.swift // ex04 // // Created by tjoeun on 2023/04/15. // import SwiftUI struct ContentView: View { var body: some View { VStack{ VStack { Spacer() Color.yellow.frame(height: 100) Spacer() Color.red.frame(height: 100) Spacer() } HStack(){ Spacer() Color.yellow.frame(width: 100) Spacer() Color.red.frame(width: 100) Spacer() } VStack{ Divider() Color.yellow.frame(height: 100) Divid..
// // ContentView.swift // ex03 // // Created by tjoeun on 2023/04/15. // import SwiftUI struct FirstText: View{ var body: some View{ Text("Hello, SwiftUI") .padding() .border(Color.blue, width:3) .background(Color.green) } } struct ContentView: View { var body: some View { VStack{ HStack { FirstText() FirstText() FirstText() } Divider() HStack(alignment: .top, spacing: 10){ FirstText() FirstTex..
// // ContentView.swift // ex02 // // Created by tjoeun on 2023/04/15. // import SwiftUI struct ContentView: View { var body: some View { // 문자를 화면에 출력하는 컨트롤 Text("스위프트 UI \n스위프트 UI 5.17 \n스위프트 UI") .padding(.all, 12.0) .padding() .font(.system(size:50)) .fontWeight(/*@START_MENU_TOKEN@*/.semibold/*@END_MENU_TOKEN@*/) .foregroundColor(Color.orange) .multilineTextAlignment(.center) .frame(width:3..
// // ContentView.swift // ex01 // // Created by tjoeun on 2023/04/15. // // Swift 지원 라이브러리 임포트 import SwiftUI //View Protocol : 화면이 보이는 요소 struct ContentView: View { // Environment 속성레퍼 : 환경설정을 읽어오는 어노테이션 @Environment(\.colorScheme) var colorScheme // some : View Protocol 을 준수하는 모든 View 에 대한 불투명 타입 var body: some View { VStack { Text("Hello, SwiftUI!") // 컨텐츠 기본 내부 여백 .padding(.all, 30.0) // 배경..
import UIKit // Raw String var str1 = "Hello, Swift5.7" print(str1) str1 = "Hello, \"Swift5.7\"" print(str1) var rawStr1 = #"Hello, \"Swift5.7\""# print(rawStr1) var str2 = "Hello\nSwift5.7" print(str2) str2 = #"Hello\nSwift5.7"# print(str2) let number = 1000 str1 = "number 는 \(number)입니다" print(str1) str1 = #"number 는 \(number)입니다"# print(str1) var zipCodeRegex = "^\\d{3}-?\\d{3}$" zipCodeRegex..
import UIKit // Foundation String // 문자열을 참조형식으로 저장하려면 // NSString 클래스를 사용함 // String : Swift String // NSString : Foundation String var nsstr1: NSString = "tjoeun" // 일반문자열(Swift String) type 에 // NSString type 의 문자열을 할당하는 경우 // as String 를 사용해야 함 let swiftStr1: String = nsstr1 as String // NSString type 의 문자열에 // 일반문자열(Swift String) type 의 문자열을 할당하는 경우 // as NSString 을 사용해야 함 nsstr1 = swiftStr..
import UIKit // String / Character let str1 = "Swift" print(type(of: str1)) // String(문자열) : 하나 이상의 문자 let str2 = "C" print(type(of: str2)) // Character(문자) : 문자 하나만 let str3: Character = "C" print(type(of: str3)) let str4 = "" print(type(of: str4)) let str5: String = "" print(type(of: str5)) // 빈문자열은 Character type 에 할당할 수 없음 // let str6: Character = "" // 공백문자는 Character type 에 할당할 수 있음 let st..
import UIKit /* Tuple Decomposition */ let data = ("", 200, "OK", 12.34) /* let body = data.0 let code = data.1 let message = data.2 let size = data.3 */ let(body, code, message, size) = data print("body :",body) print("code :",code) print("message :",message) print("size :",size) let(body2, code2, message2, _) = data print("body2 :",body2) print("code2 :",code2) print("message2:",message2) prin..
import UIKit // tuple // 여러 개의 값들을 () 안에 모아 놓은 형태 // 하나의 변수에 두 개 이상의 값을 할당함: 오류 // let n1 = 10, 20 // 두 개 이상의 값을 () 로 묶으면 // 한 장소(주소)에 값들이 연결되서 저장됨 let n1 = (10, 20) // tuple 에는 서로 다른 type 의 값들을 모아놓을 수 있음 let data = ("200", 200, "hello", 3.1415) print(data) print("data.0 :",data.0) print("data.1 :",data.1) print("data.2 :",data.2) print("data.3 :",data.3) // data(tuple) 는 상수(let)로 선언되어서 할당이 안 됨 ..
import UIKit // 값 캡쳐하기 : capturing values // ㄴ 값을 가져와서 사용한다는 의미 var num = 10 // 클로저 함수 내부에서 밖에 있는 값을 참조하는 경우 값을 캡쳐함 // swift 의 경우 해당 변수의 주소를 가져와서 사용함 // 클로저 함수 내부에서 밖에 있는 변수의 값을 변경하면 // 클로저 함수 밖에 있는 변수의 값이 변경됨 let c = { num += 1 print("check point #1 : \(num)") } c() // 클로저 함수 내부에서 밖에 있는 변수의 값을 변경하면 // 클로저 함수 밖에 있는 변수의 값이 변경됨 print("check point #2 : \(num)") print("-------------------------") //..
import UIKit /* Closure {(parameters) -> ReturnType in 명령문.... } */ // 함수를 상수 c 에 할당함 let c = {print("Hello, Swift !!")} c() let c2 = { (str1: String) -> String in return "Hello, \(str1)" } let result = c2("더조은") print(result) // closure 를 parameter 로 전달하기 // ㄴ argument 로 넣는다는 의미 typealias SimpleStringClosure = (String) -> String func perform(closure: SimpleStringClosure){ print(closure("아카데미"))..
import UIKit // 내부 함수 : nested functions // 함수의 type : parameter -> return type func outer() -> () -> (){ // print("outer") // var number = 5 func inner(){ print("inner") } return inner } // 함수 외부에서 함수 내부로 직접 접근할 수 없음 // inner() // print(number) // outer() = inner let f1 = outer() f1() func outer2() -> () -> (){ var num1 = 10 var num2 = 20 var num3 = 30 print("num1 :",num1) func inner(){ // 내부함수..
import UIKit func add(_ n1: Int, _ n2: Int) -> Int{ return n1 + n2 } func subtract(_ n1: Int, _ n2: Int) -> Int{ return n1 - n2 } func multiply(_ n1: Int, _ n2: Int) -> Int{ return n1 * n2 } func divide(_ n1: Int, _ n2: Int) -> Int{ return n1 / n2 } typealias ArithmeticFunction = (Int, Int) -> Int func selectFunction(from op:String) -> ArithmeticFunction?{ switch op{ case "+": return add(_:_:) c..
import UIKit // function type - 함수의 자료형 /* First-class Citizen 1) 함수를 변수나 상수에 할당할 수 있음 2) 함수를 parameter로 전달할 수 있음 3) 함수를 return할 수 있음 */ func test1(){ print("swift5") } test1() let f1 = test1 f1() // displayHello with 함수 : displayHello(with:) func displayHello(with name: String){ print("Hello, \(name)") } let f2: (String) -> () = displayHello(with:) let f3 = displayHello(with:) displayHello(with..
import UIKit // In-Out paramters // 입출력 파라미터 // var
import UIKit // 가변 parameters // variadic parameters print("jason") print("computer", "vessel") print("computer", "vessel", "jason") // (of numbers: Int...) : 가변 파라미터 func displaySum(of numbers: Int...){ var sum = 0 for number in numbers{ sum += number } print("sum :",sum) } displaySum(of: 1, 2, 3) displaySum(of: 1, 2, 3, 4, 5, 6) displaySum(of: 1, 2, 3, 4, 5, 6, 7, 8, 9) func displaySum2(of num..