swift

[swift] 기본문법

hwijin97 2021. 12. 9. 01:17

문자열 보간

변수와 상수 지정가능

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