• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

if랑 옵셔널 사용했는데 뭐가 잘못된걸까요? 똑같이 인덱스 범위 벗어난다고하네요

21.06.22 16:19 작성 조회수 190

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
let m = Matrix()
m[0,0]
// m[0,10]

struct Matrix2 {
    var data = [[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]]
    
    subscript(row: Int, col: Int) -> Int? {
        if row < data.count && col < data[0].count { // 행의개수, 열의개수 미만 3이면 0~2까지
            return data[row][col]
        } else { return nil }
    } // 읽기전용 서브스크립트, get {}생략 됨
}

let test = Matrix()
m[0,4]

답변 1

답변을 작성해보세요.

0

안녕하세요 :) 

두번째 인덱스 4는 범위를 벗어난 인덱스 입니다.

data에 저장된 배열에는 모두 세 개의 배열이 저장되어 있고, 각 배열마다 세 개의 숫자가 저장되어 있습니다.

그래서 두 배열 모두 유효한 인덱스 범위는 0 ~ 2입니다.

홋홋님의 프로필

홋홋

질문자

2021.06.22

ㅠ.ㅠ.. 2차원 배열 인덱스가 다 2까지인건 아는데욥..

해당 인강 마지막에 인덱스 유효값일때만 확인하는거 도전과제로

구현해보라해서 저렇게 해봤는데

if랑 옵셔널 사용한 조건식은 에러가 안나는데

코드 실행하면 out of range라고 떠서요ㅜ 

조건식에서 항상 첫 번째 배열에 접근하고 있네요. 이 부분을 수정해 보시기 바랍니다.

그리고 추가로 Matrix2 인스턴스에 접근해야 하는것 아닌가요?

홋홋님의 프로필

홋홋

질문자

2021.06.22

오오 됐어요.. 감사합니다.. ㅠㅠㅋㅋㅋㅋ

Matrix2로 만들어놓고 그냥 Matrix()로 썼네요 ㅡㅡ;; 
row번째로 하려면 조건식이 

if row < data.count && col < data[row].count { // 행의개수, 열의개수 미만 3이면 0~2까지

            return data[row][col]

        } else { return nil }

왠지 이렇게하면 될거같은데 선생님 의견은 어떠신지염