使用不同单位类型进行测量的最佳方法

2024-01-28

Context:

我正在编写一个应用程序,我想在其中显示每个菜单项的营养成分。 我希望能够灵活地使用Measurement 类进行转换。

Problem:

问题是卡路里是在Measurement 中测量的,而蛋白质等其他属性是在Measurement中测量的。我决定将变量设为Measurement 类型,这样它就可以处理这两种类型。但随后我就失去了对变量进行转换或操作的所有可能性。

这个函数会给我错误(这是有道理的,我只是不知道解决这个问题的最佳方法是什么)

二元运算符“/”不能应用于两个“测量” 操作数

func getPercentage() -> Double {
     return value / property.referenceIntake
}

如果我尝试投射它,我会收到此错误

从“测量”转换为不相关的类型 “测量”总是失败

if let massUnitMeasurement = value as? Measurement<UnitMass>, let referenceMeasurement = property.referenceIntake as? {
....
}

到目前为止我所拥有的:

struct NutritionInformation {
    let property: NutritionProperties
    let value: Measurement<Unit>

    var formattedValue: String {
        let formatter = MeasurementFormatter()
        formatter.unitStyle = .medium
        formatter.unitOptions = .providedUnit
        return formatter.string(from: value)
    }
}

enum NutritionProperties {
    case calories
    case carbohydrate
    case cholesterol
    case fat
    case saturatedFat
    case fibre
    case protein
    case sodium
    case sugar

    var unit: Unit {
        switch self {
            case .calories: return UnitEnergy.kilocalories
            case .cholesterol, .sodium: return UnitMass.milligrams
            default: return UnitMass.grams
        }
    }

    var referenceIntake: Measurement<Unit> {
        switch self {
            case .calories: return Measurement(value: 2000, unit: unit)
            case .fat: return Measurement(value: 70, unit: unit)
            case .saturatedFat: return Measurement(value: 20, unit: unit)
            case .carbohydrate: return Measurement(value: 260, unit: unit)
            case .fibre: return Measurement(value: 30, unit: unit)
            case .sugar: return Measurement(value: 90, unit: unit)
            case .protein: return Measurement(value: 50, unit: unit)
            case .sodium: return Measurement(value: 2300, unit: unit)
            case .cholesterol: return Measurement(value: 300, unit: unit)
        }
    }
}

最后,我所做的是将 Dimension 本身转换为 UnitMass 或 UnitEnergy(而不是将Measurement 转换为Measurement ),然后使用转换的值创建一个新的Measurement。

var percentage: Double {
        if let referenceAsMass = property.unit as? UnitMass, let valueAsMass = value.unit as? UnitMass {
            let valueMeasurement = Measurement(value: value.value, unit: valueAsMass)
            let referenceMeasurement = Measurement(value: property.referenceIntake.value, unit: referenceAsMass)
            return valueMeasurement.converted(to: .grams).value / referenceMeasurement.converted(to: .grams).value
        }
        if let referenceAsEnergy = property.unit as? UnitEnergy, let valueAsEnergy = value.unit as? UnitEnergy {
            let valueMeasurement = Measurement(value: value.value, unit: valueAsEnergy)
            let referenceMeasurement = Measurement(value: property.referenceIntake.value, unit: referenceAsEnergy)
            return valueMeasurement.converted(to: .calories).value / referenceMeasurement.converted(to: .calories).value
        }
        return value.value / property.referenceIntake.value
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用不同单位类型进行测量的最佳方法 的相关文章

  • 如何使 SwiftUI 列表行背景颜色扩展整个宽度,包括安全区域之外

    在 SwiftUI 中List 如何制作列表行背景 通过设置 listRowBackground 扩展视图的整个宽度 甚至在安全区域下方 例如 在宽屏 iPhone 例如 iPhone 12 Pro Max 上横向运行时 目前 该单元格在安
  • AVPlayer Swift:如何隐藏控件并禁用横向视图?

    因为这是我的第一篇文章 所以简单介绍一下我 通常我设计东西 主要是 UI 但我真的很想跨入编程领域 以便更好地理解你们 所以我决定构建一个小应用程序来开始 所以我已经花了几个小时试图解决这个问题 这是我的第一个应用程序项目 所以我为我的新手
  • UICollectionView 快速粘性标题

    我正在尝试创建一个粘性补充标题 它始终保持在顶部并且不会响应滚动事件 到目前为止 我发现的解决方案仍然对弹跳滚动做出反应 并使用自定义 flowLayout 进行修复 这也可能是我的问题的修复 我想要这种方式的原因是标头在其他地方使用并且应
  • 如何在 UIAlertController 中的 UITextField 之后插入 UILabel

    我有一个UIAlertController of alert消息文本的样式 我已经插入了一个UITextFiled在其中与addTextField 现在我想要在它下面有一串文本 我想我需要一个UILabel但我该如何插入它呢 A UIAle
  • 在 iPad 上运行时,不会触发 Mobile Safari 中即将发生的选项卡切换的 Pagehide 事件

    众所周知 Mobile Safari 在以下情况下会暂停网页上的 Javascript 执行 您切换到不同的浏览器选项卡 切换到不同的 iOS 应用程序 例如 当您接到来电时 手机应用程序 您可以订阅窗口 页面隐藏 and 页面展示 事件来
  • 使用 Swift 导入 aurioTouch 库

    我正在尝试将 Objective C 应用程序转换为 swift 我想导入课程奥里奥触摸 https developer apple com library ios samplecode aurioTouch Introduction In
  • RealityKit – 如何为自然光创建阴影捕捉器?

    我想创建一架飞机 func getShadowPlane width Float height Float gt ModelEntity let sphereResource MeshResource generatePlane width
  • 与在后台运行应用程序的一台设备进行多点连接

    我想使用多点连接框架连接 2 台设备 其中一台设备在后台运行应用程序 就像 Firechat 一样 我无法确认这是否有效 我已将其安装在 iPhone 5S 和 4 上 但是他们只是找不到彼此 但我在某处读过这有效 实现这一目标的最佳方法是
  • 将字符串编码为 HTML 字符串 Swift 3

    如何快速编码字符串以删除所有特殊字符并将其替换为其匹配的 html 编号 假设我有以下字符串 var mystring This is my String That s it 然后用它的html编号替换特殊字符 38 39 gt 62 但我
  • keyPathsForValues影响 NSManagedObject

    你好 我想将亚伦书中的客观练习翻译为 swift 但我找不到解决方案 Objective c 代码是 dynamic firstName dynamic lastName dynamic department NSSet keyPathsF
  • 搜索结果中的 Swift 搜索结果控制器连接到另一个视图控制器

    Problem 我有一个表格视图 用户可以滚动查找某些内容或使用搜索栏 搜索栏不是使用 StoryBoard 创建的 我的观点有一个UISearchController处理搜索栏和搜索结果更新 我遇到的问题是 自从我SearchResult
  • 获取 iOS Swift 中 UIViewController 的所有列表

    有没有办法获取 iOS Swift 项目中的所有 UIViewController 我想获取所有 UIViewController 的数组并检查特定的 UIViewController 是否存在 我必须找到项目中是否存在特定的 UIView
  • 如何以编程方式设置 UICollectionViewCell 宽度和高度

    我正在尝试实施一个CollectionView 当我使用自动布局时 我的单元格不会改变大小 但会改变它们的对齐方式 现在我宁愿将它们的尺寸更改为例如 var size CGSize width self view frame width 1
  • 控制 NSLayoutManager 中自定义文本属性周围的间距

    我有一个习惯NSLayoutManager我用来绘制药丸状标记的子类 我使用自定义属性为子字符串绘制这些标记 TokenAttribute 我会画画没有问题 但是 我需要在范围周围添加一些 填充 TokenAttribute 这样标记的圆角
  • 使用 Codable 将字符串编码/解码为整数,并在其间使用函数

    我有这个 json 字符串 let json name Wendy Carlos hexA 7AE147AF hexB 851EB851 let data Data json utf8 我想使用 Codable 对该结构进行编码 或返回 s
  • Swift 3 Web 视图

    所以我刚刚更新到新的Xcode8 and Swift3但现在我的网络视图不起作用 这是我使用的代码 UIWebView loadRequest webView NSURLRequest URL NSURL string http hardw
  • 使用 CommonCrypto 的 Swift AES 加密

    我正在开发一个 iOS 应用程序代码7 1 with 斯威夫特2 1我正在尝试进行简单的加密AES 128 位 and PKCS7填充使用通用加密库 该代码有效 但每次我尝试投射NSData反对NSString然后对于 String 我得到
  • NumberFormatter 分组未按预期工作

    在进行货币格式化工作时 我在尝试格式化智利比索时发现了一个问题 按照此代码 let priceFormatter NumberFormatter priceFormatter locale Locale identifier es CL p
  • 无效的 Swift 支持 - 文件位置不正确

    我一直在尝试将新版本上传到 iTunes Connect 来更新应用程序 我第一次使用 xCode 6 但收到了一封来自 Apple 的电子邮件 内容如下 亲爱的开发者 我们发现您最近交付的 应用程序 存在一个或多个问题 要处理您的交货 必
  • 在 HStack 中以正确的方式对齐两个 SwiftUI 文本视图

    我有一个包含两行的简单列表视图 每行包含两个文本视图 查看一和查看二 我想对齐每行中的最后一个标签 查看两个 以便名称标签领先对齐并保持对齐 无论字体大小如何 第一个标签 查看一个 也需要前导对齐 我尝试在第一个标签 查看一个 上设置最小框

随机推荐

  • AWS 工作层 cron - 服务器错误 #500 - “发布 http 1.1 500 AWS aws-sqsd/2.0”

    我正在尝试在 Elastic Beanstalk 上设置一个 cronjob 任务正在安排中 出于测试目的 它应该每分钟运行一次 但是它不起作用 这是一个 Django 应用程序 该应用程序在两个环境中运行 一个是工作环境 另一个是 托管
  • Flutter - 检测充满其他小部件的屏幕上的点击

    我正在尝试检测屏幕上的点击 我尝试过使用的多种变体GestureDetector但这只会导致应用程序检测到点击子元素 and 不是屏幕 这是代码 class QQHome extends StatelessWidget override W
  • 如何平滑徒手绘制的 SVG 路径?

    我正在寻找一种解决方案 将由大量 auf LineTo 段组成的手绘 用户绘制的 SVG 路径转换为更平滑的路径 首选语言是 JavaScript 但欢迎任何建议 首先 我建议使用一个好的图形库 例如raphael 它将简化实际使用 jav
  • iOS 8 横向:键盘无法正确显示

    我有一个为 iOS8 编译的应用程序 该应用程序在项目设置中设置为仅允许纵向 根据设计 应用程序的视图不会旋转为横向 在 iOS7 中 当您旋转设备以横向时 键盘不会旋转 这是我想要的行为 但是 在 iOS8 中 当您将设备旋转到横向时 键
  • 使用 RecyclerView 适配器更新数据的最佳方法[重复]

    这个问题在这里已经有答案了 当我必须使用经典适配器时ListView https developer android com guide topics ui layout listview html 我在 ListView 中更新数据 如下
  • inno-setup 脚本中的可选组件和类型

    我创建了以下 InnoSetup 脚本 用于添加可选组件 遵循此 StackOverflow 答案的建议 Inno Setup 正确使用 类型 组件 和 任务 https stackoverflow com questions 889082
  • 获取额外数据透视表列的值 laravel

    我有一个phone models phone problems 和一个phone model phone problem 数据透视表 数据透视表有一个额外的列 价格 手机型号 class PhoneModel extends Eloquen
  • 图像不会出现在闪亮应用程序的 www 文件夹中

    我正在遵循上一个问题中的代码 R Shiny 将图片添加到带有文本的流体行中的框 https stackoverflow com questions 44279773 r shiny add picture to box in fluid
  • 让 Fortran 中的函数返回一个可以放置在赋值左侧的引用

    正如标题所述 我想要directly修改我通过从函数检索的指针访问的数据 函数返回的引用出现在 l h s 上 赋值 在 C 中没有问题 但 Fortran 中的以下最小示例会出错 module test mod implicit none
  • NHibernate SysCache 是否可以在非 Web 应用程序中工作?

    我知道 SysCache 在底层使用 ASP 缓存 但由于我不知道 ASP 缓存的实现 以及它是否依赖于 IIS 我想知道 SysCache 是否可以在非 Web 应用程序中工作 例如Windows 服务 激活它并使用 NHprofiler
  • 我们如何在不下载 EXSLT 源代码的情况下使用 EXSLT?

    XSLTSL http xsltsl sourceforge net id1954375似乎声称我们可以使用 EXSLT 而无需下载其源代码 直接从图书馆网站导入或包含主样式表或您希望使用的样式表模块 http xsltsl sourcef
  • 子查询未连接到主查询

    下面的查询用于从数据库中检索记录以在报告中显示 但 SENOKO AND EUNOS 专栏显示复制每行总计 这似乎是子查询未连接到主查询导致没有进行过滤 SELECT whbal customer customer imp license
  • 了解 OpenMP 有关 fork 的缺点

    我想了解它们在这里的意思 为什么这个程序会 挂起 From https bisqwit iki fi story howto openmp https bisqwit iki fi story howto openmp OpenMP 和fo
  • 如何使用 Xcode 5 构建 iOS 6? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经下载了新的 Xcode 5 0 但我想为 iOS 6 构建一个应用程序 我怎样才能从 Xcode 5 0 做到这一点 或者我是否
  • AVPlayerLayer 作为 SCNMaterial 未渲染,音频播放正常

    我正在尝试使用 AVPlayerLayer 作为要分配给 SCNSphere 的 SCNMaterial 基于 https developer apple com library mac samplecode SceneKit Slides
  • 如何在 Android 上使用 .p12 证书?

    如何在 Android 上使用 p12 证书 我尝试将其添加到Menu Settings Location和安全 当我执行此操作时 证书会从 SD 卡中消失 但是当我访问需要 p12 证书的网站时 我只会收到连接错误 证书 密码和 URL
  • 用平均值替换值

    我有一个数据框如下 Col1 Price 1 Plastic 50 2 Metal 100 3 Plastic 40 我想用 Price 中的值替换 Col1 中的值 所以我得到 Col1 Price 1 45 50 2 100 100 3
  • SwiftUI 中的选取器适用于 ForEach 的一个版本,但不适用于另一个版本 - 错误还是预期行为?

    看哪两个拾取器 第一个 当未注释时 第二个注释 不起作用 当我更改房间时 Text 不会更新 但此处显示的代码 带有第二个选择器 却可以 唯一的区别在于内容封闭 为什么我创建内容的方式会影响绑定 这是错误还是预期行为 struct Cont
  • 模板专业化中的额外方法

    我正在尝试编写一个带有一些方法 运算符等的模板类 现在 当该类是特定类型时 我希望有额外的附加方法 特别适合该类型 而这些方法不适用于任何其他类型 我不想将所有代码复制到新类中 Example template
  • 使用不同单位类型进行测量的最佳方法

    Context 我正在编写一个应用程序 我想在其中显示每个菜单项的营养成分 我希望能够灵活地使用Measurement 类进行转换 Problem 问题是卡路里是在Measurement 中测量的 而蛋白质等其他属性是在Measuremen