문자열 보간
변수와 상수 지정가능
let name : String = "hwijin"
print("My name \(name)")
description 프로퍼티 사용해서 문자열로 변환.
주석
퀵헬프 : 옵션 + 클릭, 주석을 퀵헬프로 볼 수 있음
주석 : // or /* ... */
중첩 주석 : /* // */
마크업 문법으로 문서화 주석 : ///, /** description */ 변수, 상수, 클래스, 메서드, 함수, 열거형 등을 설명,
--- : 문단 변경
*text* : 기울임
**text** : 굵게
# or === : 큰 제목 표시
## or --- : 중간 제목 표시
네칸 들여쓰기 or ``` : 코드 블록
- note : 강조 노트
- author : 저자
- warning : 주의 할점
변수와 상수
변수 : var [ 변수명 ] : [ 데이터 타입 ] = [ 값 ] *
- 데이터 타입 미지정시 컴파일러의 추론으로 타입이 정해짐.
상수 : let [ 상수명 ] : [ 데이터 타입 ] = [ 값 ]
데이터 타입
Int, UInt (unsigned)
각각 8, 16, 32, 64 의 형태가 존재하고, min max 프로퍼티로 최대, 최소값을 알 수 있음.
시스템 아키텍쳐에 따라서 Int 의 기본타입이 달라짐.
let decimalInterger : Int = 10
let binaryInterger : Int = 0b1010
let octalInterger : Int = 0o12
let hexadecimalInterger : Int = 0xA
Bool
var boolean : Bool = true
Float, Double
Double : 64bit 부동소수 ( 15자리 숫자 )
Float : 32bit 부동소수 ( 6자리 숫자 )
1.23e5 = 1.23E5 = 1.23 x 10^5 = 123000.0
0xAp3 = 0XAP3 = 10(0xA) x 2^3 = 80.0 = 0xaP3 = 0xap3
Random
Int.random(in: -100...100)
Double.random(in: 1.5...4.3)
Character
유니코드-9 방식을 사용함.
String
유니코드-9 방식을 사용함.
var emptyString : String = String()
emptyString.append("append string")
emptyString = emptyString + "add string"
print("\(name.count)")
print("\(emptyString.isEmpty)")
let unicodeScalerValue: String = "\u{2665}"
다양한 메서드 및 프로퍼티
var hello : String = "hello"
hello = hello + " " + hello
hello == "hello" //false
hello.hasPrefix("he") //true
hello.hasSuffix("he") //false
hello.uppercased() //HELLO HELLO
hello.lowercased() //hello hello
hello.isEmpty // false
hello.count // 11
hello = """
hello
hello
"""
특수문자
\n : 줄바꿈
\\ : 문장ㄹ 내 백슬래시
\" : 문자열 내 큰따옴표
\t : 탭 문자
\O : 문자열 끝을 알리는 null 문자
#"text" : 특수문자 사용 x
#"text \#(varName)" : 보간 사용
Any, AnyObject , nil
Any : 어떤 데이터 타입을 사용 가능하다는 소리. 어떤 종류의 데이터 타입 할당가능
AnyObject : 어떤 클래스의 인스턴스든 할당가능
var someVar : Any = "string"
someVar = 50
someVar = 1.1
nil : 없음(비어있음) 을 나타냄
데이터 타입 ( 고급 )
데이터 타입 안심
서로 다른 타입의 변수의 연산에 컴파일오류를 일으킴.
타입 별칭
데이터 타입에 임의로 별칭을 부여해 사용가능.
typealias CustomInt = Int
let age : CustomInt = 100
튜플
지정된 데이터의 묶음. 구조체 형식과 비슷
데이터 타입의 나열로 튜플 타입 결정
var tup : (String, Int, Double) = ("str", 100, 50.0)
tup.1 //인덱싱
var dicTuple : (name: String, age: Int, height: Double) = ("name", 15, "150.0")
dicTuple.name
dicTuple.age
dicTuple.height
컬렉션형
배열 : 데이터 일렬로 나열후 순서대로 저장. 크기 자유로움
var names: Array<String> = ["name1", "name2" , "name3"]
var names: [String] = ["name1", "name2" , "name3"]
var anyArray: [Any] = [Any]()
var anyArray: [Any] = Array<Any>()
var anyArray: [Any] = []
0부터 인덱싱, fisrt, last 프로퍼티사용 가능. 여러 메서드 사용가능.
names.append("name4")
names.insert("insert name", at: 2)
names.append(contentsOf: ["name5", "name6"])
names.first
names.last
names.firstIndex(of: "name5")
names.removeFirst()
names.remove(at: 0)
딕셔너리 : 순서 없이 키와 쌍 값으로 구성, 같은 키 중복 x
var dictNumberForName: Dictionary<String ,int> = Dictionary<String, Int>()
var dictNumberForName: Dictionary<String ,int> = [String, Int]()
var dictNumberForName: Dictionary<String ,int> = [:]
var dictNumberForName: [String ,int] = ["name1": 1, "name2": 2, "name3": 3]
딕셔너리에선 키값으로만 접근한다. 없는 키값 접근시 nil 반환
dictNumberForName["name1"] = 111
dictNumberForName.removeValue(forKey: "name1")
dictNumberForName["name1", default: 0]
세트 : 같은 타입의 데이터를 순서없이 하나의 묶음으로 저장, 모두 순서없고 중복제거
해시 가능한 값을 요소로 가질 수 있음 ( Hashable 프로토콜 )
var names: Set<String> = Set<String>()
var names: Set<String> = []
var names: Set<String> = ["name1", "name2", "name3"]
names.insert("name4")
names.count
names.remove("name1")
names.remove("noname") //nil
세트의 목적인 집합 연산을 수행가능
set3 = set1.intersection(set2)
set4 = set1.symmetricDifference(set2)
set5 = set1.union(set2)
set6 = set1.subtracting(set2)
set1.sorted() // return set
set1.isDisjoint(with: set2) // 서로 배타적인지
set1.isSubset(of: set2) // set1이 set2의 부분 집합인지
set1.isSuperset(of :set2) //set1는 set2의 전체집합인지
컬렉션의 임의의 요소 뒤섞기 : 임의의 요소 추출 randomElement() 메서드, 컬렉션 뒤섞기 shuffle() 메서드, 새로운 뒤섞인 컬렉션 생성 shuffled() 메서드
collections.randomElement() // return an element
collections.shuffled() // shuffled new collections
collections.shuffle() // shuffled collections self