调用 @Environment 时收到错误“类 'Environment' 不能用作属性”
Posted
技术标签:
【中文标题】调用 @Environment 时收到错误“类 \'Environment\' 不能用作属性”【英文标题】:Error "Class 'Environment' cannot be used as an attribute" received when @Environment is called调用 @Environment 时收到错误“类 'Environment' 不能用作属性” 【发布时间】:2019-08-06 14:49:40 【问题描述】:我正在尝试在 SwiftUI 中包含带有自定义字体的动态类型,当我尝试获取环境的 sizeCategory
时,此错误不断被调用。
我尝试使用@Environment 获取sizeCategory
以外的对象,但它一直抛出相同的错误。
我正在使用 Xcode 11 beta 5 上 this*** 帖子中的代码修改。它似乎适用于那里的其他所有人,所以我真的很困惑为什么它不适合我。
struct RawlineFont: ViewModifier
var textStyle: Font.TextStyle
@Environment(\.sizeCategory) var sizeCategory : ContentSizeCategory
init(_ textStyle: Font.TextStyle = .body)
self.textStyle = textStyle
func body(content: Content) -> some View
content.font(getFont())
func getFont() -> Font
switch(self.sizeCategory)
case .extraSmall:
return Font.custom("Rawline", size: 16 * getStyleFactor())
case .small:
return Font.custom("Rawline", size: 21 * getStyleFactor())
case .medium:
return Font.custom("Rawline", size: 24 * getStyleFactor())
case .large:
return Font.custom("Rawline", size: 28 * getStyleFactor())
case .extraLarge:
return Font.custom("Rawline", size: 32 * getStyleFactor())
case .extraExtraLarge:
return Font.custom("Rawline", size: 36 * getStyleFactor())
case .extraExtraExtraLarge:
return Font.custom("Rawline", size: 40 * getStyleFactor())
case .accessibilityMedium:
return Font.custom("Rawline", size: 48 * getStyleFactor())
case .accessibilityLarge:
return Font.custom("Rawline", size: 52 * getStyleFactor())
case .accessibilityExtraLarge:
return Font.custom("Rawline", size: 60 * getStyleFactor())
case .accessibilityExtraExtraLarge:
return Font.custom("Rawline", size: 66 * getStyleFactor())
case .accessibilityExtraExtraExtraLarge:
return Font.custom("Rawline", size: 72 * getStyleFactor())
@unknown default:
return Font.custom("Rawline", size: 36 * getStyleFactor())
func getStyleFactor() -> CGFloat
switch textStyle
case .caption:
return 0.6
case .footnote:
return 0.7
case .subheadline:
return 0.8
case .callout:
return 0.9
case .body:
return 1.0
case .headline:
return 1.2
case .title:
return 1.5
case .largeTitle:
return 2.0
@unknown default:
return 1.0
Error message
完整的代码文件:
//
// Fonts.swift
// Team Study
//
// Created by Aditya Chugh on 2019-07-02.
// Copyright © 2019 Aditya Chugh. All rights reserved.
//
import SwiftUI
class Rawline
static let extraLight = "RawlineExtraLight-Regular"
static let extraLightItalic = "RawlineExtraLight-Italic"
static let light = "RawlineLight-Regular"
static let lightItalic = "RawlineLight-Italic"
static let thin = "RawlineThin-Regular"
static let thinItalic = "Rawline-ThinItalic"
static let regular = "Rawline-Regular"
static let italic = "Rawline-Italic"
static let medium = "RawlineMedium-Regular"
static let mediumItalic = "RawlineMedium-Italic"
static let semiBold = "RawlineSemiBold-Regular"
static let semiBoldItalic = "RawlineSemiBold-Italic"
static let bold = "Rawline-Bold"
static let boldItalic = "Rawline-BoldItalic"
static let extraBold = "RawlineExtraBold-Regular"
static let extraBoldItalic = "RawlineExtraBold-Italic"
static let black = "RawlineBlack-Regular"
static let blackItalic = "RawlineBlack-Italic"
struct RawlineFont: ViewModifier
var textStyle: Font.TextStyle
@Environment(\.sizeCategory) var sizeCategory : ContentSizeCategory
init(_ textStyle: Font.TextStyle = .body)
self.textStyle = textStyle
func body(content: Content) -> some View
content.font(getFont())
func getFont() -> Font
switch(self.sizeCategory)
case .extraSmall:
return Font.custom("Rawline", size: 16 * getStyleFactor())
case .small:
return Font.custom("Rawline", size: 21 * getStyleFactor())
case .medium:
return Font.custom("Rawline", size: 24 * getStyleFactor())
case .large:
return Font.custom("Rawline", size: 28 * getStyleFactor())
case .extraLarge:
return Font.custom("Rawline", size: 32 * getStyleFactor())
case .extraExtraLarge:
return Font.custom("Rawline", size: 36 * getStyleFactor())
case .extraExtraExtraLarge:
return Font.custom("Rawline", size: 40 * getStyleFactor())
case .accessibilityMedium:
return Font.custom("Rawline", size: 48 * getStyleFactor())
case .accessibilityLarge:
return Font.custom("Rawline", size: 52 * getStyleFactor())
case .accessibilityExtraLarge:
return Font.custom("Rawline", size: 60 * getStyleFactor())
case .accessibilityExtraExtraLarge:
return Font.custom("Rawline", size: 66 * getStyleFactor())
case .accessibilityExtraExtraExtraLarge:
return Font.custom("Rawline", size: 72 * getStyleFactor())
@unknown default:
return Font.custom("Rawline", size: 36 * getStyleFactor())
func getStyleFactor() -> CGFloat
switch textStyle
case .caption:
return 0.6
case .footnote:
return 0.7
case .subheadline:
return 0.8
case .callout:
return 0.9
case .body:
return 1.0
case .headline:
return 1.2
case .title:
return 1.5
case .largeTitle:
return 2.0
@unknown default:
return 1.0
【问题讨论】:
【参考方案1】:我收到了同样的错误信息。事实证明,我已经定义了另一个名为 Environment
的类型,编译器正在接受它。
这对我有用:@SwiftUI.Environment(\.colorScheme) var colorScheme : ColorScheme
希望对你有帮助
【讨论】:
隐秘的编译器消息在这里真的很有帮助。我几乎更喜欢 Objc 没有命名空间。【参考方案2】:如果您的应用程序中有另一个名为Environment
的对象,那将与SwiftUI
的环境关键字发生冲突。更改您的自定义 Environment
对象的名称
【讨论】:
以上是关于调用 @Environment 时收到错误“类 'Environment' 不能用作属性”的主要内容,如果未能解决你的问题,请参考以下文章
实施 FCM 时没有为应用程序错误找到有效的“aps-environment”权利字符串
运行rails应用程序时出现webpacker错误。 'TypeError:environment.plugins.set不是函数'