字体扩展导致 Swift 实时预览崩溃 (Xcode 12.3)
Font extension causes Swift live preview to crash (Xcode 12.3)
我试过像这样为我的应用程序创建字体扩展:
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)
}
...
字体在模拟器中正确应用。但实时预览崩溃并出现以下诊断错误 window
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
我是不是做错了什么?可以修复吗?
问题是 Font
已经有一个名为 caption
的静态 属性。参见 its documentation。您不应该添加具有相同名称和类型的 属性,那段代码根本不应该编译。
您需要重命名您的 属性 以解决歧义。
这同样适用于 title
和 largeTitle
,您不应重新创建 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)
}
我试过像这样为我的应用程序创建字体扩展:
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)
}
...
字体在模拟器中正确应用。但实时预览崩溃并出现以下诊断错误 window
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
我是不是做错了什么?可以修复吗?
问题是 Font
已经有一个名为 caption
的静态 属性。参见 its documentation。您不应该添加具有相同名称和类型的 属性,那段代码根本不应该编译。
您需要重命名您的 属性 以解决歧义。
这同样适用于 title
和 largeTitle
,您不应重新创建 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)
}