iOS/Swift

Swift. Ambiguous use of 'init'

StudySpare 2022. 4. 21. 17:17
반응형

아래와 같은 형태로 코드를 작성했다. 그런데 계속 에러가 뜨면서 빌드가 안됬다.

class URLProviderFactory {
	private let url: URL
    
    init(_ url: URL) {
    	self.url = url
    	super.init()
    }
    
    ....
}

class A {
	
    private func makeURLProvider(_ url: URL) {
    	let urlProvider = url.map(URLProviderFacoty.init)
    }
    
    ....
    
}

Error : Ambiguous use of 'init'

 

말그대로 init을 이상하게(모호하게) 썼다는 뜻이다.

어떻게 해도 저 에러가 뜨길래.... 

struct가 아닌 class로 구현한 것에 init을 적용해서 생긴 이슈라고 생각했다.(잘못된 생각이었다.)

 

실제 에러 화면

 

그래서 결국 아래와 같이 코드를 수정하고 커밋했다. 어떤 init을 호출하고 있는지 parameter를 포함해서 명시적으로 써줬다.

성공적으로 실행되었지만, 실제 원인은 이게 아니었다.

let urlProvider = url.map{ URLProviderFacoty.init($0) }

 

안타깝게도... URLProviderFacoty 내에 public method로 init이 재정의 되어있었다. (언제 이런 코드를 넣었는지 기억나지 않았...)

class URLProviderFactory {
	private let url: URL
    
    init(_ url: URL) {
    	self.url = url
    	super.init()
    }
    
    ...
    
    public init(_ url: URL) {
    	self.url = url
    	super.init()
    }
}

결국 원인은... 개발자의 코딩 실수 였다. 모호한 init이란 말 그대로 어떤 init을 호출하란 건지 모르겠다는 말이었다. 개발 실수를 커밋하고 PR까지 한 뒤에 깨달았다. 지금이라도 발견해서 다행이지만, 한동안 이 실수를 떠올리면 부끄러울 것 같다. 

반응형