robnik
1
This code won't compile. If I remove the @Published, it's compiles, as expected. What does the error message mean?
import SwiftUI
class Thing : ObservableObject {
@Published var title: String = ""
func foo() {
let str = String(format: "title: %@", title) // error here
print(str)
}
}
Error: Expression type 'String' is ambiguous without more context
Xcode underlines in red the "S" of "String" on that line.
Change it to String(format: "title: %@", title as NSString) (or as CVarArg - doesn't matter)
robnik
3
Any idea why? Is it a bug? @Published is not supposed to be changing the types of my properties.
Please file a bug report at bugs.swift.org
Yeah, looks like a bug to me. It seems like the constraint solver is rejecting the solution because Thing does not conform to CVarArg:
(attempting fix [fix: add missing protocol conformance] @ locator@0x7fd5b4801948 [UnresolvedDot@/Users/suyashsrijan/Desktop/test.swift:10:41 -> member])
If I add the conformance, it compiles fine.
Here's a reproducer without SwiftUI:
import Foundation
@propertyWrapper
struct Wrapper {
var wrappedValue: String
}
class Foo {
@Wrapper var bar: String = ""
func foo() {
let str = String(format: "bar: %@", bar) // expression type 'String' is ambiguous without more context
}
}
Please file a bug at bugs.swift.org
1 Like
Actually, this compiles fine on master.
young
(rtSwift)
7
I just do this instead:
String(format: "%.2f", arguments: [self.amount])
1 Like