일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- reference
- Stream
- Camera
- runTransaction
- switch
- Navigator
- globalkey
- setstate
- provider
- snackbar
- permission
- divider
- Snapshot
- platformexception
- Swift
- 문법
- transform
- consumer
- multiprovider
- controller
- borderRadius
- changenotifier
- ListView.builder
- changenotifierprovider
- Firebase
- datetime
- enum
- swift 문법
- user
- signout
- Today
- Total
목록swift 문법 (19)
코딩하는 제리
- 클래스 레벨에서 동작함. - 클래스의 새로운 인스턴스를 생성하는 것과 같은 동작. - 타입 메서드는 인스턴스 메서드와 동일한 방법으로 선언하지만 class나 static 키워드를 앞에 붙여서 선언. - class 키워드로 만든 클래스 메서드는 자식 클래스에서 override 가능. class Man { var age: Int = 1 var weight: Double = 3.5 // 인스턴스 메서드 func display() { print("\(age), \(weight)") } // 타입 메서드 class func cM() { print("class 메서드") } static func scM() { print("static 메서드") } } // 일반적 호출 및 사용 var people: Man = ..
- 기본값은 call by value, 값만 복사. - call by reference는 데이터의 메모리 주소값을 전달. - 함수 인자로 전달받은 값을 수정할 경우 실제 변수의 값을 변경. - 매개변수 타입 앞에 inout 키워드와 인자로 넘겨줄 변수명 앞에 & 키워드를 사용. var myValue = 10 func changeRealValue(num: Int) -> Int { num = 20 // 에러 발생 return(num) } print(doubleValue(value: myValue) ··· var myValue = 10 func changeRealValue(num: inout Int) -> Int { num = 20 // OK, myValue 변수의 값도 20으로 변경 됨. return(num..
- 표현식이 거짓으로 판단될 경우 수행될 else 절을 반드시 포함. - else 절에 속한 코드는 현재의 코드 흐름을 빠져 나갈 수 있는 구문(return, break, continue, throw)을 반드시 포함해야함. - 또는 다른 함수를 else 코드 블록 안에서 호출할 수도 있음. - 특정 조건에 맞지 않을 경우 현재의 함수나 반복문에서 빠져 나갈 수 있도록 '조기 출구' 개념 guard else { // 표현식이 거짓일 경우 실행될 코드 } // 표현식이 참일 경우에 실행될 코드 - guard문은 값을 언래핑 하기 위해서 옵셔널 바인딩을 사용, 그 값이 10보다 작은지 검사 - 변수를 언래핑 할 수 없거나 그 값이 10보다 크면, else 절이 실행되어 에러 메시지 출력, 이 함수에서 빠져 나..
// 타입 검사 // is 키워드를 이용해 값의 타입을 검사 // 지정된 객체가 MyClass 클래스의 인스턴스인지 검사 if myObject is MyClass { // myObject는 MyClass의 인스턴스이다. } // 범위 연산자 // ...10// 10 이하 // 10...// 10 이상 // 1...10// 1 부터 10 까지 // 1.. optional(black)이 아님
// 상속 관계가 있는 클래스들끼리만 타입 캐스팅 가능. // upcasting (자식 as 부모) // 자식이 부모로부터 상속받아 더 많은 것을 가지고 있으면 부모로 캐스팅하는 것은 문제 없음. // as 연산자를 이용한 타입 변환(type casting) // - 자식인스턴스 as 부모클래스 (upcasting (안전한 캐스팅). 자식이 추상화 됨. // - 업캐스팅은 객체를 부모 클래스의 객체로 형변환. // - 형변환은 성공할 것이기 때문에 보장된 변환. // 자식인스턴스인 myButton을 부모 클래스형으로 형변환. let myButton: UIButton = UIButton() let myControl = myButton as UIControl // 자식인스턴스 as 부모 클래스. // dow..
// 값을 반환할 때 오류가 발생할 가능성이 있는 값은 옵셔널 타입이라는 객체로 감싸서 반환. // Int("100")은 100이 아닌 Optional(100)을 리턴함. // Int("Hi")는 정수 값을 반환할 수 없음. 아무런 값도 반환할 수 없다(nil 반환). // nil 값을 저장하려면 Optional 타입으로 선언해야함. // 변수 또는 상수에 아무런 값이 할당되지 않는 상황을 안전하게 처리하기 위함.(null-safety와 비슷?) // 옵셔널 타입 변수를 선언하기 위해서는 타입 선언부 뒤에 "?" 문자를 씀. // 정수값을 갖거나 nil을 가질 수 있음. var index: Int? // nil 값을 옵셔널이 아닌 변수나 상수에 할당할 수 없음 var myInt = nil // error..
// 스위프트 언어에서 가장 강력한 기능 중 하나. // 여러 값을 하나의 개체에 일시적으로 묶는 방법. // 어떤 타입이든 넣을 수 있음. // 저장하는 값이 모두 동일한 타입이어야 한다는 제약도 없음. let myTuple = (10, 11.1, "Jerry") // 튜플 접근법 (index) var myString = myTuple.2 // Jerry // 튜플 접근법(모든 값을 추출하여 변수 또는 상수에 할당) let (myInt, myFloat, myString) = myTuple // "_" 언더바를 넣으면 추출을 무시함 let (myInt, _, myString) = myTuple // 튜플을 생성할 때 각 값에 이름 할당 가능. let myTuple = (count: 10, length: ..
// @autoclosure // 파라미터로 전달된 일반 함수를 클로저로 래핑 하는 것. // 파라미터 함수 타입 정의 바로 앞에 작성. // 실제 클로저를 전달받지 않지만, 클로저 처럼 사용 가능. // 반드시 파라미터가 없어야 함. func doSomething(closure: @autoclosure () -> ()) { } // 클로저와 다른 점은 실제 클로저를 전달하는 것이 아니기 때문에 // 파라미터로 값을 넘기는 것 처럼 ()를 통해 구문을 넘겨줄 수 있음. doSomething( 1 > 2 ) // 일반 실행 구문이나 클로저 어느 것을 적용해도 // 해당 구문을 {} 형태로 감싸서 클로저 형태로 만든 후 인자 값으로 전달 해야함. doSomething( { 1 > 2 } ) // @autoc..