인프런 커뮤니티 질문&답변

홋홋님의 프로필 이미지
홋홋

작성한 질문수

iOS 개발을 위한 swift5 완벽 가이드

Subscript

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

작성

·

283

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

KxCoding님의 프로필 이미지
KxCoding
지식공유자

안녕하세요 :) 

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

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

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

홋홋님의 프로필 이미지
홋홋
질문자

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

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

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

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

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

KxCoding님의 프로필 이미지
KxCoding
지식공유자

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

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

홋홋님의 프로필 이미지
홋홋
질문자

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

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

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

            return data[row][col]

        } else { return nil }

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


홋홋님의 프로필 이미지
홋홋

작성한 질문수

질문하기