[SwfitUI, iOS] Generic parameter ‘R’ could not be inferred 오류 발생 이유와 해결방법
오류 발생 코드
......생략
public var normalizeCurrentCapacity: Int?
battery.normalizeCurrentCapacity = getNormalizeCurrentCapacityPercent(rawCurrent: battery.currentCapacity!, rawMax: battery.maxCapacity!, designCap: battery.designCapacity!)
....생략
func getNormalizeCurrentCapacityPercent(rawCurrent: Int, rawMax: Int, designCap: Int) -> Int {
let fraction = getNormalizeCurrentCapacity(rawCurrent: rawCurrent, rawMax: rawMax, designCap: designCap)
return Int(fraction * 100)
}
Text(checkBattery.normalizeCurrentCapacity + "%")
Swift에서는 Int
와 String
을 +
연산으로 직접 연결할 수 없습니다. 그래서 컴파일러가 어떤 타입으로 제네릭을 추론해야 할지 모르는 상황이 되어 Generic parameter 'R' could not be inferred
오류가 발생합니다.
해결 방법
Int
타입을 먼저 문자열로 변환해줘야 합니다.
Text("\(checkBattery.normalizeCurrentCapacity ?? 0)%")
또는 명시적으로:
Text(String(checkBattery.normalizeCurrentCapacity ?? 0) + "%")
이렇게 하면 normalizeCurrentCapacity
가 옵셔널(Int?)이라도 안전하게 처리할 수 있고, 문자열 결합도 올바르게 작동합니다.
최종 코드 예시:
HStack {
Text("currentCapacity".localized)
.font(.subheadline)
Spacer()
Text("\(checkBattery.normalizeCurrentCapacity ?? 0)%")
.font(.subheadline)
}
🔎 추가 팁
normalizeCurrentCapacity는 nil이 될 수 있으므로 ??로 기본값을 설정하는 것이 좋습니다.
Swift는 타입 안전성을 위해 String + Int를 허용하지 않습니다. 항상 String으로 변환해야 합니다.