낭만 프로그래머
Swift 기본 문법 정리 본문
1. 변수, 상수
var : 변수
let : 상수
* 접근제한자 : (제약이 많음) open > public > internal > fileprivate > private (제약이 적음)
* static, class : 전역변수로 사용 (static은 오버라이딩이 안됨)
* final : 오버라이딩 불가
* 타입? : null일수 있음
* 변수! : 강제로 null이 아님을 지정
* ( 변수 ?? default ) : nil일 경우 default를 값으로
2. Tuple
var tuple1 = {"data1", "data2"}
tuple1.0 //data1
tuple1.1 //data2
var tuple2 = {status: "data1", title: "data2"}
tuple2.status //data1
tuple2.title //data2
3. IF
if count <= 10 {
}
4. Switch
* 다른 언어와 달리 break를 해주지 않아도 해당 case만 실행 한 후 빠져나온
switch test {
case "a", "A":
print("A")
default:
print("Not")
}
5. For
for country in countries
for (key, value) in keyValues
for index in 1...20
6. While
while count < 10 {
}
repeat {
} while count < 10
7. String
* 변수.description : String 형으로 변환되어 보여줌
* last()
* dropLast()
* split()
8. Array
var countryArray = Array<String>()
var countryArray = [String]()
for (index, country) in countryArray.enumerated() {
}
* append()
* insert()
* sort(), sorted()
9. Set
var set1: Set = [1,2,3,4,5,6]
var set2: Set = [1,2,3,4,5,6]
set1.union(set2) //합집합
set1.insertsection(set2) //교집합
set1.symmetricDifference(set2) // 합집합-교집합
set1.subtracting(set2) //여집합
10. Dictionary
var isoCountry = [String : String]()
isoCountry["kor"] = "대한민국"
var isoCountry = ["kor" : "대한민국", "ukr" : "우크라이나"]
isoCountry.keys
for data in isoCountry {
}
11. Function
func plus(num1: Int, num2: Int) -> Int {
return num1+num2
}
func plus(num1: Int, num2: Int) -> (Int, String) {
return (num1+num2, "테스트")
}
func plus(_ num1: Int, _ num2: Int) -> Int {
return num1+num2
}
func parentPlus(num1: Int, num2: Int, plusFunc: ((Int, Int) -> Int)) {
plusFunc(num1, num2)
}
12. Closure
let testClosure = { (a: Int) -> String in
return "\(a)점"
}
let testCLosure = { (a: Int) -> String in
"\(a)점"
}
let testCLosure = { (a: Int) in
"\(a)점"
}
let testCLosure: (Int) -> String = { a in
"\(a)점"
}
let testCLosure: (Int) -> String = {
"\($0)점"
}
13. enum
enum Classification {
case part
case drawing
case document
}
enum Classification {
case part(title: String, seq: Int)
case drawing(title: String, seq: Int)
case document(title: String, seq: Int)
}
func saveClassification(classification Classification) {
if classification == .part {
}
}
14. class
class Info {
init(n: String) {
}
init(n: String, m: Int) {
}
convenience init() {
self.init("ADS")
}
deinit {
}
}
var infoInstance = Info("AAAAA")
class Parent {
func abc() -> String {
return "AA"
}
func ttt() -> String {
return "AA"
}
}
class Child: Parent {
override func abc() -> String {
return super.ttt()
}
}
var name = "" //클래스 생성시 메모리 로딩
lazy var name = "" //호출 시점에 메모리 로딩
var _title = ""
var title: String {
get{
return _title
}
set{
_title = newValue
}
}
15. struct
* class와 다르게 참조가 아닌 복사로 기능이 이루어 진다
struct Test {
var name = ""
func someFunc() {
}
}
var test1 = Test()
var test2 = test1 // test2와 test1은 다른 인스턴스임 (복사니까)
16. extension
extension Int {
var oddEven: Int {
if self % 2 == 0 {
return 1
}
else {
return 2
}
}
}
4.oddEven
17. protocal
* interface와 유사함. 여러개를 implements 할 수 있음
protocal UserInfo {
var name: String {get set}
var age: Int {get set}
func isAult() -> Bool
}
extension UserInfo {
func isChild() -> Bool {
return false
}
}
class My: UserInfo {
}
18. generic
struct IntStack<CustomType> {
var items = [CustomType]()
mutating func push(item: CustomType) {
items.append(item)
}
mutating func pop() -> MyType? {
}
}
var myStack = IntStack<String>()
19. 고차원 함수
* map()
* reduce()
* filter()
* compactMap()
* flatMap()