SwiftUI프로그래밍

[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에서는 IntString+ 연산으로 직접 연결할 수 없습니다. 그래서 컴파일러가 어떤 타입으로 제네릭을 추론해야 할지 모르는 상황이 되어 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으로 변환해야 합니다.
error: Content is protected !!