"""
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"]
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
순서가 보장되지 않고, 중복된 값에 대해서 한개만 출력한다.
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}
옵셔널로 지칭해주지 않더라도 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] //딕셔너리 생성과 동시에 키와 값 입력
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)로 하게되면 오류가 발생한다.
-> String.element 오류로 순수한 스트링이 아닌 받아온 거기 때문에 우선 String으로 변환해줄 필요가 있다.
-> 값이 비어있을수 있기 때문에 옵셔널 언랩핑을 해야 한다.
let a = 0
while a == 0 { //조건이 false가 될때까지 무한 실행함
print("계속 실행") //무한으로 찍힘
}
let a = "a"
switch a {
caes "a":
print("a")
.
.
default:
print("other")
}
계산기 -> 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)
}