【问题标题】:Font extension causes Swift live preview to crash (Xcode 12.3)字体扩展导致 Swift 实时预览崩溃 (Xcode 12.3)
【发布时间】:2021-01-19 09:37:02
【问题描述】:

我尝试为我的应用程序创建字体扩展,如下所示:

import SwiftUI

extension Font {
    // H1
    static var largeTitle: Font {
        return Font.custom("Roboto-Bold", size: 34)
    }
    
    // H2
    static var title: Font {
        return Font.custom("Roboto-Bold", size: 24)
    }

    // Body 2 (input title)
    static var caption: Font {
        return Font.custom("Roboto-Regular", size: 14)
    }

...

字体在模拟器中正确应用。但实时预览崩溃并在诊断窗口中出现以下错误

ambiguous use of 'caption'

----------------------------------------

CompileDylibError: Failed to build LoginView.swift

Compiling failed: ambiguous use of 'caption'

/src/Login/LoginView.swift:31:31: error: ambiguous use of 'caption'
                        .font(Font.caption)
                              ^
/src/Font.swift:38:16: note: found this candidate
    static var caption: Font {
               ^
SwiftUI.Font:14:23: note: found this candidate
    public static var caption: Font

我做错了吗?有办法解决吗?

【问题讨论】:

    标签: ios swift xcode swiftui live-preview


    【解决方案1】:

    问题是Font 已经有一个名为caption 的静态属性。见its documentation。您应该不能添加具有相同名称和类型的属性,那段代码根本不应该编译。

    您需要重命名您的属性以解决歧义。

    这同样适用于titlelargeTitle,你不应该重新创建Font 上已经存在的属性,你应该重命名它们。

    与您的问题无关,但无需将这些属性添加为计算属性,它们可以是不可变的存储属性。

    extension Font {
        // H1
        static var robotoLargeTitle = Font.custom("Roboto-Bold", size: 34)
        
        // H2
        static var robotoTitle = Font.custom("Roboto-Bold", size: 24)
    
        // Body 2 (input title)
        static let robotoCaption = Font.custom("Roboto-Regular", size: 14)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 2013-11-03
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多