Search code examples
iosswiftuikitxcode15xcode-previews

Xcode 15 - Preview macro error with UIKit UIView


In my legacy code base with public Xcode 15.0, I can't preview any UIKit views with the new #Preview macro

import SwiftUI

#Preview {
    let uiView = UIView()

    return uiView
}

The canvas fails to load preview with failure diagnostic Compiling failed: return expression of type 'UIView' does not conform to 'View'


Solution

  • I find that restricting this one-statement preview to iOS 17 works:

    @available(iOS 17, *)
    #Preview {
        return UIView()
    }
    

    However, this two-statement preview still does not work:

    @available(iOS 17, *)
    #Preview {
        let uiView = UIView()
        return uiView // 🛑 Value of optional type 'UIView?' must be unwrapped to a value of type 'UIView'
    }
    

    To get the two-statement preview to work, I have to make the variable type explicit:

    @available(iOS 17, *)
    #Preview {
        let uiView: UIView = UIView()
        return uiView
    }