IOS UIkit -0

김정현·2023년 4월 5일
0

UIKit

목록 보기
2/14

String

"""
a
b
c
"""

위 방법을 사용해 여러줄 String출력이 가능하다.

let isOn = true
isOn.description        

//"true"    

let Number = 123
Number.description    //String(Number) 랑 같음

//"123"         글자로 출력됨


"my number is \(Number)"     // \()으로 스트링 형태로 출력함

"my number is \(Number)".last   //마지막 글자만 출력함

//"3"
//dropLast()는 마지막 글자만 버림 First도 있음

String을 배열형태로 나눌 수 있다.

let Number = 12.33
String(Number).split(separator:".")    //.을 기준으로 나눔

//["12", "33"]

컬렉션 타입

Array

var mynames = Array<String>() // ()이니셜라이저로 메모리에 등록함

var myname =  [String]()

append 키워드로 요소 추가

mynames.append("KIM")
mynames.append("lee")
mynames.append("park")

방어코드로 에러를 막을 수 있다.

mynames[3]         //인덱스 1요소에 없기 때문에 앱이 에러로 종료됨


//방어코드로 에러 방지 
let index = 3

if mynames.count > index { 
mynames[index]
}

다른 배열 추가

mynames.append(contentsOf: ["a", "b"] )

mynames = mynames + ["a", "b"]

인덱스 제거

mynames.remove(at: 2)    

인덱스 삽입

mynames.insert("abc", at: 1)

인덱스와 요소 동시 접근

for (index, name) in mynames.enumerated() {
	print(index, name)

}

//0 KIM
//1 lee
//2 park

Set

순서가 보장되지 않고, 중복된 값에 대해서 한개만 출력한다.

var names = Set<String>()
names.insert("kim")
names.insert("min")
names.insert("lee")
names.insert("lee")

//{"min", "kim", "lee"}

배열을 Set으로 타입변경하면 중첩된 요소를 제거할 수 있다.

var numbers1: Set = [1, 2, 3, 4, 5]
var numbers2: Set = [4, 5, 6, 7, 8]

//교집합
numbers1.intersection(numbers2)
->{4, 5}

//합집합
numbers1.union(numbers2)
->{8, 7, 6, 5, 1, 3, 4, 2}

//합집합 - 교집합
numbers1,symmetircDifference
->{1, 8, 3, 7, 2, 6}

//여집합
numbers1.subtracting(numbers2)
->{3, 2, 1}

Dictionary

옵셔널로 지칭해주지 않더라도 nil이 할당될 수 있다. 값을 nil로 입력해주면 키또한 사라진다.

var namesOfStreet = [String : Any]()

namesOfStreet["302ro"] = "1st Street"
namesOfStreet["303ro"] = "2st Street"
namesOfStreet["304ro"] = 3

namesOfStreet["302ro"] = nil

namesOfStreet["302ro"]
//nil

namesOfStreet.keys        //키값만 출력됨
namesOfStreet             //키와 값 출력

var namesOfStreet2= ["a" :1, "b" : 2, "c" : 3]      //딕셔너리 생성과 동시에 키와 값 입력

Control Flow

  • for문
let name = "anna"

for char in name {
	print(char)
}

//a
//n
//n
//a

String.element 오류

let number = "1234"

for char in number {
	print( (Int(String(char)) ?? 0) * 10 )      
}

그냥 Int(char)로 하게되면 오류가 발생한다.

  1. element 오류

-> String.element 오류로 순수한 스트링이 아닌 받아온 거기 때문에 우선 String으로 변환해줄 필요가 있다.

  1. 옵셔널 오류

-> 값이 비어있을수 있기 때문에 옵셔널 언랩핑을 해야 한다.

  • while (왠만하면 비추천, 리소스를 무한대로 사용)
let a = 0

while a == 0 {             //조건이 false가 될때까지 무한 실행함 
	print("계속 실행")      //무한으로 찍힘
}
  • Switch
    조건에 케이스를 만들어 분기
let a = "a"

switch a {
caes "a":
	print("a")
.
.
default:
	print("other")
    
}

Function

계산기 -> class
+ - -> func

let a = 10
let b = 20

func plus(num1: Int, num2: Int) -> Int {
	return num1 + num2        //-> Int와 return으로 결과 값을 밖으로 내보냄
}

plus(num1: a, num2: b)

타입 생략 가능하다.

func plus(_ num1: Int, _ num2: Int) -> Int {       //_ 로 생략가능
	return num1 + num2        
}

plus(a, b)

튜플로도 가능하다.

func plus(num1: Int, num2: Int) -> (String, Int) {
	return ("결과 값은",  num1 + num2)        //리턴을 두가지 타입으로 받음
}

따로따로 지정해주는 것이 아니라 공통부분을 함수로 돌려서 지정해주면 수정 및 코드를 파악하기가 쉬워진다.

func plus(_ num1: Int, _ num2: Int) -> Int {
	return num1 + num2
}
.      (minus, multiply 함수) 
.
.

func calc(result: ((Int, Int) -> Int) ) {
	print("연산 결과", result(a, b)) //화면에 뿌려줌
}

if inputButtonType == "+" {
	displayCalc(result: plus)   //plus함수 호출, plus를 해서 화면에 던져줌
    
}else if inputButtonType == "-"{
	displayCalc(result: minus)
    
}else if inputButtonType == "*"{
	displayCalc(result: multiply)

}

0개의 댓글