테이블 레포트 입니다.
'IOS > 레포트' 카테고리의 다른 글
클로저(closure)/후행클로저(trailing closure) (0) | 2019.11.11 |
---|---|
Failable Initializers / 1.jpg (문자열 자르기) (0) | 2019.11.05 |
Swift와 Object-C 차이 (0) | 2019.10.15 |
테이블 레포트 입니다.
클로저(closure)/후행클로저(trailing closure) (0) | 2019.11.11 |
---|---|
Failable Initializers / 1.jpg (문자열 자르기) (0) | 2019.11.05 |
Swift와 Object-C 차이 (0) | 2019.10.15 |
후행 클로저 : Trailing closure라고 하며 파라매터중 마지막 파라매터가 클로저일 경우 파라매터 레이블을 사용하지 않고 바로 클로저로 사용하는 것을 후행 클로저 라고 한다.
다음은 UIAleartAction 클래스의 인스턴스를 생성하는 과정이다.
UIAleartAction의 Initailizer를 보면 아래와 같은데 주목할 부분은 마지막 파라매터인 handler이다.
handler의 타입은 반환형이 Void인 옵셔널 함수이다.
@여기서 함수형이 옵셔널인 이유는 아무 동작도 하지 않는 UIAleartAction형 인스턴스 변수를 생성할 수 있기 때문이다.
이제 인스턴스를 생성해 보자
1
2
3
4
|
let offAction = UIAlertAction(title: "아니오, 끕니다(off)", style: UIAlertAction.Style.default,
handler: {
ACTION in self.lampImg.image = self.lampOff
self.isOn = false})
|
offAction이라는 변수를 생성했고 파라매터 값으로 각각의 문자열, 스타일을 넣어주는 모습을 확인 할 수 있다.
마지막 파라매터는 클로저 함수(익명함수)로 함수인데 이름이 없는 함수라고 할 수 있다.
함수의 이름을 붙이는 이유는 다시 사용하기 위해서 이름을 붙여주고 정의를 한뒤 호출해서 사용한다. 하지만 스위프트는 재사용 필요가 없는 한번만 쓰면 되는 함수를 코드안에 바로 짜넣을 수 있는데 그것이 바로 클로저 함수라고 한다.
위와 같은게 클로저 함수 이고 위 코드를 후행 클로저로 짯을때를 비교해보자
1
2
3
4
|
let offAction = UIAlertAction(title: "아니오, 끕니다(off)", style: UIAlertAction.Style.default)
{
ACTION in self.lampImg.image = self.lampOff
self.isOn = false}
|
위와 다른 점은 마지막 파라매터의 내부 매개변수명(파라매터의 레이블)이 없어지고 바로 괄호를 닫고 클로저를 삽입했다는 점이다.
그래서 클로저 함수는 마지막파라매터가 클로저 함수일때 파라매터의 레이블을 생략해버리고 괄호를 닫은뒤 클로저 함수를 삽입해도 에러 없이 실행이 가능하다.
1203 - Table (0) | 2019.12.03 |
---|---|
Failable Initializers / 1.jpg (문자열 자르기) (0) | 2019.11.05 |
Swift와 Object-C 차이 (0) | 2019.10.15 |
Failable Initializers란
클래스, 구조체, 열거형을 만들때 실패할 가능성이 있으면 Initailizer뒤에 옵셔널을 줘서 인스턴스 생성실패를 막아줄 수 있다.
예로는 다음과 같다
UIImage 클래스를 인스턴스로 선언할때 볼 수 있다
위는 이름 초기화 중 해당이름이 없을때 초기화 실패 가능성이 있기때문에 Failable Initializers를 사용하고 있다.
문자열 자르기
위는 픽커뷰 사용중 row하나가 선택되었을 때 실행되는 함수로
lblImageFileName.text = String(imageFileName[row].split(separator: ".").first!)
|
cs |
하나씩 해석해보면 다음과 같다.
lblImageFileName : 아웃렛 변수
lblImageFileName.text : 아웃렛 변수의 텍스트
imageFileName : String형 배열
row : pickerView로 선택된 행 번호
split(separator: ".") : 점( . )을 기준으로 문자열을 자르겠다는 함수
.first : 자른 문자열중 첫번째에 인자에 해당하는 값
결론은 lblImageFileName.text에 imageFileName의 이름을 .을 기준으로 잘라서 점 앞쪽에 있는 문자열을 대입하는 과정이다
하지만 문자열 자르는 부븐을 String으로 형변환을 해주었다.
왜냐하면 imageFileName[row].split(separator: ".").first! 이부분의 자료형은 String.SubSequence 이기 때문에
String? 형인 imageFileName.text에 대입이 될수 없기 때문이다
1203 - Table (0) | 2019.12.03 |
---|---|
클로저(closure)/후행클로저(trailing closure) (0) | 2019.11.11 |
Swift와 Object-C 차이 (0) | 2019.10.15 |
클래스로부터 만들어진 객체를 인스턴스라고 한다.
Property : 스위프트에서 변수가 클래스 안으로 들어가면 Property라고 한다.
Method : 스위프트에서 함수가 클래스 안에 있으면 Method라고 한다
1
2
3
|
class Man{
var age : Int
}
|
cs |
Man이라는 클래스를 생성하고 Int형 프로퍼티 age를 생성한 모습이다.
생성과 동시에 스위프트에서 에러를 확인할 수 있다.
"Stored property 'age' without initial value prevents synthesized initializers"
2행에 선언된 age는 Stored porperty로 저장공간이 있는 프로퍼티이다. 때문에 Swift는 age의 값을 초기화 또는 initalizer(생성자)를 통해 오류를 해결할 수 있다.
방안1. age 값을 초기화 하기
1
2
3
4
5
|
class Man{
var age : Int = 0 //age = stored property
var age1 : Int?
var age2 : Int!
}
|
cs |
방안2. 는 인스턴스 이후 나옴니다.
인스턴스 변수를 생성하기 전에 맨의 프로퍼티와 메소드를 다음과 같이 정의합니다.
1
2
3
4
5
6
7
8
9
10
11
|
class Man{
var age : Int = 2 //Stored Property
var weight : Double = 3.5 //Stored Property
func display(){ //instance method
print("나이 \(age), 몸무게 =\(weight)")
}
class func cM(){ //클래스 메소드, class를 지우고 static을 사용가능
print("클래스 메서드입니다.")
}
}
|
cs |
2~3행 : age와 weight는 Int형과 Double형을 가졌고 2와 ,3.5로 초기화된 Stored Porperty입니다.
4행 : instance가 사용하는 method입니다.
7행 : class가 사용하는 method입니다.
1
2
3
4
5
6
7
|
var kim : Man = Man() //인스턴스, ()는 initializer
kim.display() //인스턴스가 display를 호출
//.display는 인스턴스 메소드 이다
kim.cM() //--> Static member 'cM' cannot be used on instance of type 'Man'
Man.cM() //클래스 메소드는 클래스가 호출한다.
}
|
cs |
1행 : kim이라는 이름을 가진 Man Class를 사용하는 인스턴스 변수를 만듭니다. 우측에 괄호는 initializer라고 합니다.
3행 : class안에 display()메소드를 사용하는 행으로 kim이라는 인스턴스가 display()를 호출합니다.
5행 : Man class안에 cM()메서드를 사용하려 했지만 에러가 발생합니다.
Static member인 cM은 인스턴스 변수에서 사용하지 못한다는 얘기입니다.
class 메서드는 static메서드와 사용 방법이 같은것을 유추할 수 있습니다.
하지만 static메서드는 나중에 나올 상속 과정에서 상속을 받지 않고 class메서드만 상속을 할 수 있습니다.
6행: 5행을 주석처리 하여 에러를 없앤다음 클래스 메서드를 호출하는 행 입니다.
인스턴스를 변수를 만들때 var/let 이름 : 클래스 = 클래스(이니셜라이저)와 같은 형식으로 만들수 있습니다
추후 추가 예정
swift - Selector Type (0) | 2019.10.01 |
---|---|
Object -C , Swift 간단 비교 (0) | 2019.10.01 |
2. Swift 기본 창 설명 (0) | 2019.09.10 |
1. Swift 프로젝트 만들기 (0) | 2019.09.10 |
Swift 참고 사이트 (0) | 2019.09.10 |
스위프트 | Object-C |
Object-C를 보완하기 위해 탄생됨 | C언어에서 파생 |
++,-- 증감 연산자가 없음(3.0이후 버전) | ++,-- 증감 연산자가 있음 |
세미콜론(;)을 사용하지 않음 | 세미콜론(;)을 사용함 |
변수 타입이 뒤에 나옴 | 변수 타입이 앞에 나옴 |
String 자료형이 있음 | String 자료형이 없음 |
포인터를 사용하지 않음 | 오브젝트 타입 옆에 포인터(*)를 붙임 |
func 함수이름(인자명1: 인자타입1....) -> 리턴 타입 {} | -(리턴타입) 함수이름:(인자타입1)인자명....{} |
변수 타입을 꼭 명시 하지 않아도됨 | 변수 타입을 명시해야함 |
문자열에 switch/case문이 가능하다 | 문자열에 switch/case문이 불가능하다 |
if let 으로 if문에 변수 값을 넣는게 가능 | |
optional 변수가 있다 | optional 변수가 없다 |
함수 parameter에 기본 값을 지정할 수 있음 | |
함수가 2개 이상의 값을 리턴할 수 있음(멀티플 반환 값) | |
제네릭 타입 존재(배열, 딕셔너리..) | |
튜블 존재 | |
메소드, 확장프로그램 및 프로토콜을 지원 |
1203 - Table (0) | 2019.12.03 |
---|---|
클로저(closure)/후행클로저(trailing closure) (0) | 2019.11.11 |
Failable Initializers / 1.jpg (문자열 자르기) (0) | 2019.11.05 |
Selctor 형은 다음과 같이 생겼다.
let/var 변수명 : Selector = #selector(함수명)
함수이름을 저장하는 자료형으로 사용한다.
1
|
let timeSelector: Selector = #selector(ViewController.updateTime)
|
참고 링크 : Https://youtu.be/pHyTtzbDHgc
Swift class, instance, 상속, 다형성 (0) | 2019.10.16 |
---|---|
Object -C , Swift 간단 비교 (0) | 2019.10.01 |
2. Swift 기본 창 설명 (0) | 2019.09.10 |
1. Swift 프로젝트 만들기 (0) | 2019.09.10 |
Swift 참고 사이트 (0) | 2019.09.10 |
스위프트는 프로젝트를 생성하면 .swift파일 두개와 storyboard두개가 생성된다.
ViewController.swift파일의 초기 내용은 다음과 같다.
swift프로젝트와 다르게 오브젝트-C의 초기 파일은 다음과 같다
간단하게 프로젝트 생성시 만들어지는 파일 목록 또는 확장자만 보아도 Swift프러젝트인지 Object-c프로젝트인지 구분이 가능하다
Swift class, instance, 상속, 다형성 (0) | 2019.10.16 |
---|---|
swift - Selector Type (0) | 2019.10.01 |
2. Swift 기본 창 설명 (0) | 2019.09.10 |
1. Swift 프로젝트 만들기 (0) | 2019.09.10 |
Swift 참고 사이트 (0) | 2019.09.10 |
다음과 같이 나눠져 있다.
Navigator Bar : 사진에 있는 파일들은 SingleView를 선택했을 경우 자동으로 생성되는 파일 들이고 파일 관리, 에러 메세지, 깃 등 을 확인 할 수있다. (멍멍3.jpeg 제외)
Document Outline : 디자인 한 아웃라인이 들어가 있는 창이다.
Inspector Bar : 인스펙터창이라 하고 객체들의 속성 값들은 나타낸다.
AppDelegate.swift, ViewController.swift는 프로젝트 생성시 자동으로 생성된다.
swift - Selector Type (0) | 2019.10.01 |
---|---|
Object -C , Swift 간단 비교 (0) | 2019.10.01 |
1. Swift 프로젝트 만들기 (0) | 2019.09.10 |
Swift 참고 사이트 (0) | 2019.09.10 |
Swift 란 (0) | 2019.09.10 |