Swift: Cannot convert value of type 'X' to expected argument type 'Y'
The value’s type doesn’t match what the function or property expects.
Seen on:
iOS
Meaning
Common with optionals (String? vs String), numeric types (Int vs Double/CGFloat), closures with wrong signatures, and Binding vs value in SwiftUI.
Common causes
- Optional passed where a non-optional is needed
- Different numeric types without conversion
- Closure signature mismatch
- Passing a value instead of a Binding ($state)
⚡ Quick fix
- Unwrap optionals (if let/guard/??)
- Convert explicitly: Double(x), CGFloat(y)
- Use $ for bindings in SwiftUI
Detailed fix by platform
Swift
- swift
let width: CGFloat = CGFloat(columns) * 44 Toggle("Notifications", isOn: $settings.enabled)
How to diagnose
- Types — Actual vs expected
- Context — Optional/numeric/binding?
🔧 Still not fixed?
Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:
Similar errors
Most viewed in iOS
Other ways to find it
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
Was this page helpful?
Report a correction or suggest an improvement
Last updated 7 Oct 2026