[Swift] 프로젝트의 선택적 바인딩 지원
개요
프로젝트의 보수로서, 강제 언랩 되고 있는 개소를 옵셔널 바인딩으로 변경해 나가고 싶다. 그 때의 체크 방법과 수정 방법을 정리합니다.
수정하고 싶은 부분
1.
hoge!
같은 강제 언랩옵셔널형의 변수를 비옵션널형으로서 사용하고 싶을 때(특정의 메소드로 인수로서 등), 강제 언랩을 해 사용하면, 만약 값을 취득할 수 없었던 경우에 크래쉬 해 버리는 등의 위험이 있다.
2.
= nill
에서의 nill 체크if 変数 = nill
에서 조기 return 시켜도, 그 변수를 사용할 때는 강제 언랩 하지 않으면 컴파일할 수 없다. (동작으로서는 문제 없지만, 강제 언랩하고 있는지 어떤지를 한눈에 알기 어렵기 때문에, 유지 보수의 용이성이라는 관점에서 변경하고 싶다. 기본적으로는 프로젝트의 방침에 맞춘다.)그 때문에, 이하와 같은 대응으로 옵셔널 바인딩을 한다.
· guard-let 구문
원래 코드 1.swift
method(hoge!.image)
원래 코드 2.swift
if hoge.image == nil { return }
let image = hoge!.image
method(image)
수정 후 .swift
guard let image = hoge.image else { return }
method(image)
이 경우, hoge가
nil
로 image에 값이 들어가지 않는 경우(image에 nil이 들어 버리는 경우)에는 return에 의해 처리를 빠질 수가 있다.또, 취득하고 싶은 값이 언랩 하고 싶은 변수 그 자체이었을 경우, 일부러 범위내 변수를 설정하지 않고,
_
를 이용해 옵셔널 바인딩만 하는 방법도 있다.원래 코드.swift
method(hoge!)
수정 후 .swift
guard let _ = hoge else { return }
method(hoge)
여러 변수를 단번에 선택적 바인딩
어느 하나라도 값을 얻을 수 없으면 처리를 빠져 싶다! 라고 하는 때는, 일괄로 옵셔널 바인딩할 수 있다.
원래 코드 1.swift
method(a!, b!, c!)
원래 코드 2.swift
if a == nil || b == nil || c == nil { return }
method(a!, b!, c!)
수정 후 .swift
guard let a = a,
let b = b,
let c = c else { return }
method(a, b, c)
또, 다른 처리로 사용하는 변수라도, 같은 스코프내이면,
스코프의 최초에 일괄로 옵셔널 바인딩 하는 것이 쓸데없는 처리를 시키지 않아도 된다.
원래 코드.swift
guard let a = a else { return }
method1(a)
guard let b = b else { return }
method2(b)
guard let c = c else { return }
method3(c)
수정 후 .swift
guard let a = a,
let b = b,
let c = c else { return }
method1(a)
method2(b)
method3(c)
· If-Let 구문
값을 취득할 수 없으면 처리를 빠진다고 한다
guard-let
구문에 대해,값을 취득할 수 있으면(자) 특정의 처리를 실시한다고 하는 기술을 할 수 있는 것이
If-Let
구문.image를 취득할 수 있어도 할 수 없어도,
method2()
는 달리고 싶다! 그렇다면,guard-let.swift
guard let image = hoge.image else { return }
method1(hoge)
// imageが取得できなかった場合処理を抜けてしまうのでmethod2()は走らない
method2()
if-let.swift
if let image = hoge.image { method1(image) }
// imageが取得できなくてもmethod2()は走る
method2()
위와 같이,
If-Let
구문을 사용하는 것으로, 값을 취득할 수 없어도 다음의 처리에 갈 수가 있다.주의점
강제 언랩을 피함으로써, 취득하고 싶은 값이 어떠한 이유에 의해 취득할 수 없었던 경우, 크래시 시키지 않고 처리를 빠질 수 있다.
그러나, 유저측으로부터 하면 「화면은 정상인데, 조작해도 반응하지 않는다! 」라고 하는 상황이 되는 경우도 있다.
따라서 필요에 따라
등의 대응을 취하는 것도 생각한다.
Reference
이 문제에 관하여([Swift] 프로젝트의 선택적 바인딩 지원), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/haru16-no14/items/522f5fed5cd23acfbc8a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)