야곰님 iOS 기초 프로그래밍 간단문제 풀이

KIMTAEKON·2021년 12월 12일
0
post-thumbnail

야곰님의 강의 중 초반에 위치한

요녀석을 풀어보았다.

스위프트 기초개념

Q1.

변수선언할 때 카멜케이스를 적용하는 것이 좋다고 들은 것이 있다.
그래서 4번 myName이 적절하다고 생각해서 4번을 체크했다.
Lower Camel case : 함수 변수 상수 메서드 등
Upper Camel case : 클래스 구조체 열거형 등

Q2.

Swift에서 print와 dump 둘다 콘솔로그를 남길 수 있는 함수다.
dump를 사용하면 데이터타입도 나오기때문에 더 자세한 정보를 얻을 수 있다.

Q3.

output 변수에 문자열이 와야하고
보간법 사용을 위해서 역슬래시 \ 가 사용되어야한다.

Q4.

차후에 변경이 불가능해야하니까 let 을 선택해야한다.


스위프트 기본 데이터타입

Q1.

오류가 발생하는 코드는
let numberThree:UInt = -123 과 let character : Character = 'A' 이다.

UInt 데이터타입은 부호 없는 정수를 취한다.
그리고 character 데이터타입은 문자 하나를 취하는데..
왜 틀린진 모르겠다.
아마 내가 유추해본 바로는 ''가 아니라 ""를 써야했기때문에 틀린 게 아닐까...

Q2.

Q3.

오류가 발생하는 코드는
(1)var arrayThree : [Int] = [Int] 와
(2)var dictionaryOne : Dictionary = Dictionary() 이다.

멤버가 index를 가진 리스트 형태의 컬렉션 타입 array.
var arrayThree : [Int] = [Int] 를 swift 에 작성해보니
'Can't convert value of type '[Int].Type' to specified type '[Int]'.' 라는 내용의 error가 나왔다.
어떤 error 일까?
'[Int].type' 값을 [Int]로 변환할 수 없다.
= 기준으로 좌변과 우변의 type이 맞지않아서 발생한 error가 아닐까하고 유추된다.
그러므로 우변을 array type으로 바꿔주면 해결될 것 같다.

우선 array 선언 가능의 경우를 알아보자.
var arrayThree : [Int] = Array()
이게 기본형이고

var arrayThree : [Int] = [Int]()
var arrayThree : Array<Int> = Array<Int>()
var arrayThree : [Int] = []
var arrayThree = [Int]()

도 추가로 사용 가능하다.
그러므로
var arrayThree : [Int] = [Int] 는
var arrayThree : [Int] = Array() 로 모양을 바꿔줘야한다.

다음으로
var dictionaryOne : Dictionary = Dictionary()는 왜 틀렸으며 어떻게 고쳐야할까?
key와 value 를 쌍으로 가지고있어야하는 dictionary type.
먼저 Dictionary type의 선언방법을 찾아보자.

var dictionaryOne : Dictionary<String, String> = [String : String]() 

가 기본형이다.

//key가 String 이고 value 가 String type인 dictionary.
var anyDictionary: Dictionary <String, Any> = Dictionary<String, Any>()
var anyDictionary: Dictionary <String, Any> = [:]
var anyDictionary: [String: Any] = Dictionary<String, Any>()
var anyDictionary: [String: Any] = [String: Any]()
var anyDictionary: [String: Any] = [:]
var anyDictionary = [String: Any]()

도 추가로 사용 가능하다.

그러므로
var dictionaryOne : Dictionary = Dictionary() 가 틀렸던 이유는
key 값과 value 값을 같이 써주지않았기 때문이다.
올바르게 바꾼다면(key 는 String, value 는 Any type 으로.)

var dictionaryOne : Dictionary <String, Any> = Dictionary<String, Any>()

로 바꿀 수 있다.

정확한 풀이가 없어서 내가 직접 찾아가면서 풀어보았다..
재밌다!


스위프트 함수

Q.

swift의 function 기능 문제이다.
addOne은 변수 a에 left 아규먼트 라벨과 data type만 선언, b에 right 아규먼트 라벨과 data type만 선언했고,
addTwo는 a에 정수 0과 b에 정수 0을 넣어주었다.

처음 문제를 풀었을때, 나는 addTwo(b:10)이 답인것 같아서 저걸 체크했지만 결과는 틀렸다.
addTwo(b:10) 을 호출하면 10 이라는 리턴이 정상적으로 출력되나보다. 함수 외부에서 매개변수를 적절히 호출했다.
addTwo() 의 경우는 0 이라는 리턴이 나올 것이다.
addTwo(a: 10, b : 10) 은 적절한 변수이름과 데이터타입, 그리고 데이터타입을 따르는 숫자를 호출했으므로 정상적으로 20 이 리턴될 것이다.
addOne(left : 0, right : 0)은 아규먼트 라벨로 정상적으로 호출했으므로 0이 리턴될 것이다.
addOne(a : 10, b : 20)이 이 문제의 정답인데 왜 정답일까? 하고 다시 야곰 프로그래밍 강의를 복기했다.
아규먼트 라벨이 정의된 function의 경우에
함수 호출 시, 아규먼트 라벨로 호출해야한다는 사실을 간과하고 있었다ㅠㅠ
추가로 함수 외부에서 매개변수로 호출된 addOne(a : 10, b : 10) 은 incorrect 라고 error가 발생한다!!


스위프트 제어구문

Q1.

if문이고 someInteger 변수는 50 으로 선언되었다.
첫번째 조건인 someInteger < 100 에 부합하므로
100 미만 이 출력되고
if문은 끝이 난다.

                       >
                       

Q2.

break; 가 없어서 실행이 안될 것이라고 생각해서 찍었는데 맞췄다.
명시적으로 break 를 쓰지않아도 swift에선 case마다 자동으로 break를 해주는 특성을 잊고 있었다 ㅠㅠ
이 switch문의 경우, default 가 없을뿐더러 case 조건 중 겹치는 부분이 있어서 실행이 안된다.
또한 switch case문의 기본형은

switch value{
case pattern :
	code
default :
	code
}

를 갖춰야하는데 갖추지도 못했다!

올바르게 작성하여 바꾸어보았다.

let somm = 50

switch somm {
case 0:
  print("zero")
case 1..< 47 :
  print("1~47")
case 50 :
  print("50")
default:
  print("unknown")
}

이렇게 되면 50이 정상적으로 출력된다.
혹시 애매하게 case를 정한다면 어떻게될까 라는 궁금증이 생겨서

  case 1..< 47 :
  print("1~47")

대신

                     
  case 1..< 99 :
  print("1~99")

를 넣고 나머진 똑같게 해서 출력을 해봤더니
1~99가 출력되고 case 조건이 만족되어서 자동으로 break 가 되었다.

            >

Q3.


상수 max가 1 로 선언되었고 변수 count가 0 으로 선언되었다.
'count = count + 1 된 후에 count가 출력됨.'을 반복하고
count 는 max 보다 작아야만 한다(제한조건 1).

즉, repeat문에서
count = 0 + 1 이 되어
1 이 출력되고
count < max 조건으로 인해서
repeat문이 멈추게 된다.
그래서 답은 1 이다.


스위프트 옵셔널

Q1.

let optionalFour : Int = nil 가 정답이다.
왜냐하면 Int 로 data type을 이미 정해놓았는데 nil 값을 할당 선언할 수 없다.
나머지 보기들은 nil 로 선언된다.

Q2.

nil 값에 사칙연산을 붙일 수 없다 ㅠㅠ
그리고 nil 값을 곱하기한다는 것부터 이미 print가 되지않는다.

Q3.

? 물음표가 들어가있습니다.

옵셔널바인딩!! nil체크와 + 안전한 추출
if let을 이용한다.


옵셔널 파트를 다시 봐야겠다!!
마지막 문제로 갈수록 글자 수가 줄어드는건 기분탓인가😑
그리고 오늘 포스팅한 것만 반복적으로 봐도
초보인 나에게 많은 도움이 될 것만 같은 느낌적인 느낌이👀👀👀👀

0개의 댓글