◈ Swift 문법
1. 작성 규칙
- main 이 없어서 작성한 순서대로 실행
- entry point(시작하는 지점)를 만들고자 하는 경우에는 클래스 이름 위에 @UIApplicationMain 이라는 어노테이션을 추가해주면 됩니다.
- 변수를 선언할 때 자료형을 기재하지 않으면 자료형 추론을 해서 자료형을 설정
- 연산자 앞 뒤에 공백을 몇 개를 삽입해도 상관없지만 앞에 공백이 있으면 뒤에도 있어야 하고 앞에 공백이 없으면 뒤에도 없어야 합니다.
- try ~ catch 지원 : 대다수 클라이언트 프로그램을 만들기 때문에 잘 하지 않는데 되도록이면 해주고 개발이 끝나고 난 후 삭제하는 것이 좋습니다.
- import는 외부 라이브러리 참조용 입니다.
2. 로그. 출력 함수
1) print
- 첫번째 파라미터가 가변 파라미터로 되어 있기 때문에 여러 개 출력하고자 할 때는 ,로 구분해서 계속 입력
- separator 옵션을 이용하면 구분자를 중간에 넣어서 출력이 가능
- terminator 옵션을 이용하면 출력이 끝나고 마지막에 Enter 대신에 삽입
2) NSLog
- 출력할 때 날짜와 시간 그리고 파일이름등을 같이 출력
- iOS 앱 개발에서 사용 - Playground에서는 사용하지 않음
3) debugPrint: 자료형을 구분해서 출력 - 문자열의 경우는 따옴표를 해서 출력
4) dump: 인스턴스의 내용을 출력하고자 할 때 유용
- 세부 내용까지 같이 출력
5) 주의
- 앱 개발 도중에 로그 출력 함수를 사용했다면 개발이 끝나고 난 후 전부 삭제하는 것이 좋습니다.
- 로그를 출력하는 것도 시스템 자원을 사용하는 것이기 때문입니다.
6) 로그 출력 함수의 차이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import UIKit
let name="steve"
let age = 50
//숫자 데이터는 동일하게 출력
print(age)
debugPrint(age)
//문자열은 print는 그냥 출력
//debugPrint는 자료형을 알 수 있게 출력
print(name)
debugPrint(name)
let rect = CGRect(x: 100, y: 30, width: 100, height: 100)
//함수의 결과 출력
print(rect)
//객체의 내용을 출력
dump(rect)
|
cs |
3. 데이터 분류
1) 변경 여부에 따른 분류
- mutable data : 변경 가능한 데이터 - 변수(Variable)
- immutable data : 변경이 불가능한 데이터 - 상수(Constant: 개발자가 의도적으로 값을 변경할 수 없도록 만든 이름, Literal: 프로그램 작성 시 개발자가 직접 입력하는 값)
2) 저장되는 형태에 따른 분류
- value type : 1개의 값을 저장하는 자료형
- reference type : 대표하는 값의 참조(위치)를 저장하는 자료형
3) 저장하는 데이터의 개수에 따른 분류
- Scala Type : 1개의 데이터 저장 - 보통은 Value Type: 이름이 데이터를 의미
- Vector Type : 0개 이상의 데이터 저장 - Reference Type: 이름은 데이터의 모임의 참조
4) 데이터의 모양에 따른 분류
- 정형 데이터 : 데이터의 모양이 정해진 구조 - 테이블 구조의 데이터
- 비정형 데이터 : 데이터의 모양이 일정하지 않은 구조 - 텍스트, 음성 등의 데이터
- 반정형 데이터 : 비정형의 텍스트지만 정형의 형태로 변환이 가능한 데이터 - json, xml 문자열
5) 언어 또는 책 마다 분류하는 방법은 다양합니다.
- 최근에는 value type 과 reference type으로 구분하는 거의 하지 않음
4. swift의 데이터 이름 생성 방법
1) 값의 변경 여부에 따라 var 와 let으로 구분
var : 값을 변경 가능
let : 값을 변경하지 못함
=>var로 선언했는데 값을 1번도 변경하지 않으면 경고가 발생 -> let 으로 설정하도록
2) null 포함 여부에 따라 Optional 과 Optional이 아닌 자료형으로 나눔
3) 묵시적 자료형과 명시적 자료형
- 묵시적 자료형은 자료형을 기재하지 않는 방식으로 자료형 추론을 이용해서 자료형을 설정
- 명시적 자료형은 자료형을 기재하는 방식
4) Swift는 정적 바인딩
- 정적 바인딩은 데이터를 대입하기 전에 자료형을 결정하는 것
- 자료형을 미리 설정하고 컴파일할 때 잘못된 데이터가 입력되면 실행하지 않음
5) 변수 명명 규칙
- 영문자, 숫자, 한글, 한자, 특수문자, 이미지 용 바이너리 모두 가능
- 예약어는 변수명으로 사용할 수 없지만 대소문자를 변경하거나 작은 따옴표로 감싸면 예약어도 변수 이름으로 가능
- 연산자는 안됨
- 숫자로 시작할 수 없고 _ 이외의 특수문자도 안됨
- 중간에 공백은 안됨
6) 변수 생성
- 자료형을 생략하면 자료형 추론으로 자료형 설정
- 자료형을 생략한 상태에서 값을 생략하면 에러
- 값을 생략하거나 nil을 대입할려면 자료형이 Optional이어야 함
- swift에서는 null 대신에 nil 이라고 합니다.
자료구조에서는 null 대신에 nil 이라고 합니다.
- 변수 이름은 하나의 영역에서는 한번만 생성되어야 함
- 변수에 값을 대입할 때는 변수이름 = 값 의 형태
- 카멜 표기법 : 클래스 와 인터페이스(프로토콜) 이름은 대문자로 시작하고 변수 와 메소드 이름은 소문자로 시작 그리고 상수는 모두 대문자로 표기 (2개 단어이상으로 만들어진 경우 2번째 단어의 첫글자는 대문자로 시작)
- 헝거리언 표기법 : 변수 이름 앞에 자료형과 범위를 표기하는 방식
블린은 b, 정수는 n, 실수는 f, 문자는 c, 문자열은 str 을 붙여서 생성, 지역변수는 _, 인스턴스 변수는 m, 전역변수는 g
(ex. m_str: 인스턴스 변수이고 문자열 변수)
- iOS 11, swift 4 버전까지는 대부분의 나열형 상수가 대문자로 만들어져 있었으나 그 이후에는 대부분 소문자로 변경
7) 자료형
Int : 정수 기준형
Int8, Int16, Int32, Int64: 부호있는 정수
UInt8, UInt16, UInt32, UInt64: 부호없는 정수
=> 부호없는 정수가 부호가 있는 정수보다 숫자의 표현 범위가 2배 크다
var age:Int = 50 // Int 형 age라는 변수를 생성하고 50이라는 값을 대입
=> 0b: 2진수 - 기계가 숫자를 표현하는 방법, 0o: 8진수 - 파일의 허가 모드 설정, 0x: 16진수 - 색상값을 나타내거나 메모리의 참조를 나타낼 때 이용
Float - 32bit 실수이고 소수는 7자리까지 정밀하게 표현
Double - 64bit 실수이고 소수는 15자리까지 정밀하게 표현
실수 상수는 Double
이전에는 실수를 Float을 많이 사용했기 때문에 API에서는 실수 자료형이 Float 인 경우가 더 많습니다.
Bool - true 또는 false 저장
nil : 데이터를 저장하지 않는다는 참조형 리터럴
swift에서는 모든 자료형의 변수에 nil 대입이 가능 - Optional만 붙으면
5. 타입 추론과 타입 명시
- swift는 타입에 안전한 언어 : 정적 바인딩 언어
선언할 때 선언한 자료형의 데이터만 대입이 가능
- 선언할 때 선언한 이외의 자료형의 데이터를 대입하면 컴파일 할 때 에러
- swift는 변수를 선언할 때 자료형을 기재하지 않으면 반드시 초기값을 설정해야 합니다.
이 초기값을 가지고 타입을 추론해서 사용
var n //이 경우는 에러 - n의 자료형을 추론할 수 없어서
var n = 10 //이 경우는 10을 보고 자료형을 추론해서 Int 로 간주
=> 타입을 반드시 명시해야 하는 경우는 nil을 저장하기 위한 것과 Int 이외의 정수 자료형 그리고 Double 이외의 실수 자료형 그리고 String 대신에 Character를 사용하고자 하는 경우입니다.
var x = 10 //자료형은 Int
var y:Int32 = 10 //Int32가 자료형
var d = 10.4 //d의 자료형은 Double
var f:Float = 10.4 //f의 자료형은 Float
var str = “T” //str의 자료형은 String
var ch:Character = “K” //ch의 자료형은 Chracter
- 개발자들은 자료형 명시를 선호
- var 대신에 let을 붙이면 변수의 값을 변경 못함 - 상수화
이전 개발 방법론에서는 이름을 모두 대문자로 하는 것을 권장했지만 swift에서는 별다른 제약이 없음
- swift의 변수나 메소드 표기법은 클래스 다이어그램(UML)의 표기법
'공부 공간 > Swift' 카테고리의 다른 글
Swift 03. Playground (0) | 2020.08.13 |
---|---|
Swift 02. Swift의 특징 (0) | 2020.08.13 |
Swift 01. Xcode 설치하기 (0) | 2020.08.13 |
댓글