일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- weak var
- Xcode
- 서체관리자
- UIAlertAction
- SwiftUI Boolean 값
- MKMapViewDelegate
- RunningTimer
- 러닝타이머
- 러닝기록앱
- Protocol
- CoreLocation
- font book
- UICollectionViewFlowLayout
- swift
- 한국어 개인정보처리방침
- Timer
- WeatherManager
- weatherKit
- addannotation
- AnyObject
- App Store Connect
- Startign Assignments
- xcode로 날씨앱 만들기
- CLLocationManagerDelegate
- 단일 책임원칙
- MKMapItem
- Required Reason API
- 영문 개인정보처리방침
- 클로저의 캡슐화
- dispatchsource
- Today
- Total
목록Whale life (215)
VesselWheel
Watching YouTube on your smartphone during breaks may not be helpful for relaxation. The reasons include eye discomfort from smartphone use, decreased concentration, and increased stress. Instead, it's better to take a real break by engaging in activities such as walking, meditation, or outdoor activities.
They may often start there, but once they make someone feel something, they're unstoppable. They blaze through boundaries and ripple through time.Bending rules, breaking conventions, pushing back doubt, and pulling us forwards. Bending rules, breaking conventions, pushing back doubt, and pulling us forwards. They create bursts of self-expression, grant freedom,and bring change. And once this hap..
달라이 라마는 계속해서 두려움을 없애나가는 것이 마음과 건강에 좋 다고 말한다. 그는 문제를 다른 각도에서 보고, 정신과 관점을 넓히고, 분 석 명상을 해야 한다고 말한다. 예를 들어, 문제를 한 방향에서만 바라볼 때."실직 당했어?"라고만 생각한다. 그러면 실망하고 낙담하고 우울해지 기 시작하며, 마음의 문을 닫아버린다. 하지만 상황을 이런 식으로 바꿔서 보면 어떨까? "와, 드디어 회사를 잘라냈다. 지금까지 내게 일어난 일 중에 가장 최고의 일이야. 내게 360도의 가능성이 생겼다. 밖에는 나를 기다리는 3만 7,000개의 일자리가 있어. 이제 예전부터 하고 싶었던 일을 할 수 있게 되었어." 다른 각도에서 보기 시작하면 모든 것은 바뀐다.
// 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..
https://billionsuccess.com/big-things-small-beginnings-thinking-big-making-small-progress/
// 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..
import UIKit // argument label // (name: String) // (to name: String) // name : parameter 이름 // to : argument label func sayHello(name: String){ print("Hello, \(name)") } sayHello(name: "더조은") // 함수의 이름과 parameter 이름, 개수, type이 // 같으나, 중복 오류가 발생하지 않음 // ㄴ argument label 을 사용했기 때문 func sayHello(to name: String){ // 함수 body에서는 argument label 사용 못함 // print("Hello, \(to)") print("Hello, \(name)") }..
import UIKit // parameter 가 있는 함수 // parameter Int{ return num1 + num2 } // parameter 가 있는 함수를 호출할 때는 // parameter 의 개수와 type, 순서에 맞는 // argument 를 전달해 줌 // ㄴ parameter 로 전달되는 값 print(add1(num1:11, num2:22)) print(add1(num1:2, num2:1)) // parameter 에 기본값 할당하기 // default value / default parameter func sayHello(to: String = "더조은"){ print("Hello, \(to)") // print("Hello,",to) } sayHello(to:"이순신") s..
/* Function (함수) 전체 : 함수 정의부 첫 번째 줄 : 함수 선언부 func 함수이름(parameter) -> returntype{ 함수내용 output 프로그램에서의 함수 parameter (input) return 값 (output) input -> output X -> output input -> X X -> X */ // parameter 가 없는 함수 / return 값이 없는 함수 func sayHello() { print("hello, Swift !!!") // 호출한 곳으로 돌아감 // return : return 값이 없으면 생략 return } // 함수 호출하기 : 함수이름(parameter에 맞는 argument) sayHello() // parameter X / ret..
// Optional Pattern let n1: Int? = 0 let n2: Optional = 0 if n1 == nil{ } // n1 == nil 과 같은 표현 if n1 == .none{ } // n1 에 0 이 저장되어 있는지 확인하기 if n1 == 0{ } // n1 == 0 과 같은 표현 if n1 == .some(0){ } if let n1{ print(n1) }else{ print("nil") } // if let n1 와 같은 표현 if case .some(let n1) = n1{ print(n1) }else{ print("nil") } // if let n1 와 같은 표현 if case let n1? = n1{ print(n1) print(type(of: n1)) }else{ p..
// Nil Coalescing Operator : ?? // nil 병합연산자 var message = "" var input: String? = "Swfit5" if let input{ message = "Hello, " + input }else{ message = "Who are U?" } print("message :",message) var str1 = "Hello, " + (input != nil ? input! : "Who A U?") print(str1) var str2 = "Hello, " + (input ?? "Who A U?") print(str2) /* Optional Chaining ㄴ Optional 은 연달아서 호출함 1) Optional Chaining 의 결과는 항상 Opt..
import UIKit // Optional Biding var n1: Int? = nil // if 조건으로 작성하면 강제 unwrapping 해야 함 if n1 != nil{ print(n1!) }else{ print("nil") } // Optional Binding 으로 하면 ! 을 사용하지 않음 if let n1{ print(n1) }else{ print("nil") } var str1: String? = "swift5" guard let str1 else{ fatalError() } print("str1 :", str1) let n2: Int? = 3333 let str2: String? = "IOS" // 아래의 if문이 실행되려면 // let n2_1 = n2, // let str2_1 =..
import UIKit /* Optional (옵셔널) Int type Optional Int type */ // Int type 의 값 할당하기 var n1: Int = 10 // Optional Int type 의 값 할당하기 // ㄴ Int type 의 값을 할당하거나 // 아무 값도 할당되지 않은 상태(nil) var n2: Int? = 20 var n3: Int! var n4: Int! = 40 print(n1) print(n2) // 갑을 할당하지 않으면 자동으로 nil 로 설정됨 print(n3) print(n4) print(Int(100)) print(100) // Optional(1234) print(Int("1234")) // 값을 사용하려면 Optional 을 풀어줌 : ! // 12..