IOS UIkit- 0

김정현·2023년 4월 6일
0

UIKit

목록 보기
3/14

클로저

구조상으로 함수와 비슷하다.

//function
func myScore(a: Int) -> String {
	return"\(a)점"
}

let score = myscore(a: 40)    //받아오는 이름이 있음
score     //"40점"


//closure
let myScore2 = { (a: Int) -> String in
	return "\(a)점"
}

myScore2(20)     //"20점" 

클로저는 이름이 없는 함수이다.

클로저의 축약형

let myScore3 = { (a: Int) -> String in
	 "\(a)점"      //한 줄일 경우 return 생략 가능


let myScore4 = { (a: Int) in  //타입추론이 가능. 
	"\(a)점"


let myScore5: (Int) -> String = { a in    //타입을 미리 지정한다. (var a: Int = 10)  처럼
	"\(a)점"
}


let myScore6: (Int, Int, Int) -> String = {       //in이 생략됐다면 $를 쓰겠다고 생각
	"\($0 + $1 + $2)점"     //한줄이라 retutn 생략됨
}

클로저 활용

//특정한 글자가 포함된 것을 찾는 함수
//입력한 글자로 시작하는 첫글자를 찾는다.
let names = ["apple", "air", "brown, "red", "orange", "blue", "candy"]

let containsSomeText: (String) -> Bool = { name, find in
	if name.contains(find) {
    	return true
    }	
	return false
}

let is StartSomeText: (String, String) -> Bool = { name, find in
	if name.First?.description == find {       //description 은 String타입으로 변환해줌
    	return true
    }
    return false   
}

func find(findString: String, condition: (String, String) -> Bool) -> [String] {
	var newNames = [String]()
    
    for name in names {
    	if condition(name, findString) {
        newNames.append(name)
        }
    }
    
    return newNames
}


find(findString: "a", condition: containsSomeText)      




------------------------------------------------
func someFind(find: String) -> [String] {
	var newNames = [String]()
    
    for name in names {
    	name.contains(find) {
        
        }
    }
    
    return newNames
}

sort

sort() 는 원본 자체를 정렬,
sorted()는 리턴이 있음

names.sort { (lhs, rhs) -> Bool in
	return lhs > rhs
}

names.sort{ $0 < $1 }
names.sort{ $0 < $1 }
names.sort(by: <)    
다 같음

enum

타입분류

enum BookType {
	case fiction
    case comics
    case workbook
}

var bookStyle: BookType?    //어떤 북타입일지 모름

var books = [BookType]()
func saveBook(book: BookType) {
	if boook == .comics {
        ...(스위치문 등등)
    }
}

0개의 댓글