두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하는 문제
import Foundation
let line = readLine()!
let lineArr = line.split(separator: " ")
let a = Int(lineArr[0])!
let b = Int(lineArr[1])!
print(a + b)
import Foundation
let line = readLine()!
let lineArr = line.components(separatedBy: " ")
print(Int(lineArr[0])! + Int(lineArr[1])!)
!
: 옵셔널 강제추출. 답 코드에서 만약 readline()값이 nil이라면 코드가 터진다.
if let
을 사용해 코드를 안전하게 바꿔보자
import Foundation
var myName: String? = "sujilee" //myName은 옵셔널타입. "sujilee"로 초기화
var yourName: String? = nil //yourName은 옵셔널타입. nil로 초기화
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
} else {
print("some nil is bothering you")
}
//OUTPUT : some nil is bothering you
yourName = "sean" //nil이었던 yourName에 "sean" 값을 할당
if let name = myName, let friend = yourName {
print("now \(name) and \(friend)")
}
//OUTPUT : noew sujilee and sean
import Foundation
var line = readLine() //readLine()은 String? 을 반환한다.
//lineArr에 대한 nil가드
if let lineArr = line?.split(separator: " ") {
//a와 b에 대한 nil가드
if let a = Int(lineArr[0]), let b = Int(lineArr[1]) {
print(a + b)
} else {
print("case 2 : a b both nil")
}
} else {
print("case 1 : realine nil")
}
뻑은 a, b에서 났다. 이유는 Index out of range
lineArr는 지금 빈 문자열, [] 상태이다.
그런데 인덱스 0과 1에 접근하려고 하니 에러가 발생한 것. lineArr에 nil이 들어갈 줄 알았던 예상과 달랐고, 왜 readline()을 옵셔널 강제추출로 할당하는지 납득했다. 애초에 readline에는 nil이 들어갈 일이 없다!