반응형

 

Hacking with Swift 사이트의 강좌 번역본입니다.

 

[원문 : https://www.hackingwithswift.com/quick-start/swiftui/how-to-fix-initializer-init-rowcontent-requires-that-sometype-conform-to-identifiable]

 

How to fix “Initializer ‘init(_:rowContent:)’ requires that ‘SomeType’ conform to ‘Identifiable’”

 

오류가 발생하는데는 3가지 일반적인 이유가 있고, 모두 비교적 쉽게 고칠수 있습니다.

 

첫번째 이유는 다음과 같이 List ForEach를 사용하는 것입니다:

ForEach(1 ... 10) {

 

SwiftUI는 반개방 범위 연산자 ..<를 지원하지만, 폐쇄 범위 연산자는 지원하지 않습니다. 결과적으로, 위 코드를 다음과 같이 다시 작성해야 합니다. 

ForEach(0 ..< 10) {

 

두번째 이유는 문자열이나 정수형의 배열과 같은, Identifiable 프로토콜을 준수하지 않는 기본(primitive) 타입에서 List ForEach를 사용하는 것입니다. 이러한 상황에서는, 다음과 같이 List ForEach에 두번째 매개변수로 id: .self를 사용해야 합니다.

ForEach(stringArray, id: \.self) {

 

배열에 있는 각각의 값이 고유하다는 것을 SwiftUI에게 알려주고, 반복문에서 각 항목을 식별하기 위해 사용될 수 있습니다. 

 

마지막으로 발생하는 이유는 Identifiable를 준수하지 않는 사용자정의 구조체의 배열을 반복하는 경우입니다. 해당 프로토콜에 준수하도록 추가(고유한 id 프로퍼티를 추가)하거나 List ForEach에 두번째 매개변수로 id: . someUniquePropertyName를 사용해야 하며, ID 대신에 해당 프로퍼티를 사용합니다.

 

예를들어: 

struct User: Identifiable {
    var id = UUID()
    var username: String
}

 

대안:

ForEach(users, id: \.username) {

 

반응형
Posted by 까칠코더
,