【问题标题】:Why isn't UIImage part of the Foundation framework?为什么 UIImage 不是 Foundation 框架的一部分?
【发布时间】:2017-03-21 16:11:07
【问题描述】:

我正在开发一个允许用户将图片添加到数据模型的应用程序。 (我使用的是 Realm,但过去我对 CoreData 和 SQLite 做过同样的事情。)我开始使用如下代码构建模型对象:

import Foundation
import RealmSwift

class Picture: Object {
    dynamic var imagePath: NSString = ""

    var image: UIImage {
        get {
            ...
        }
        set(UIImage) {
            ...
        }
    }
}

这当然会产生 Swift 编译器错误:

Use of undeclared type 'UIImage'

添加import UIKit 解决了这个问题,但后来我想知道:

  • 为什么UIImage 不是数据模型类型?

  • 为什么UIImage 不是Foundation 的一部分?

有人知道吗?

【问题讨论】:

  • 但是为什么会这样呢?! UIImage 用于在 iOS 上呈现图像,有 NSImage 对应的 macOS。那么为什么 UIImage 会在 Foundation 中,知道 Foundation 在 所有 平台上共享?此外,图像不是基础的一部分。处理图像不应该放在 Foundation 中,而应该放在高级课程中。
  • 我不知道答案,但也许 UIImage 应该仅用于在 UI 中呈现图像,其中 actual 图像存储为文件或 NSData .
  • @EricAya 您应该将其发布为答案。
  • @rmaddy 你说得对,我已经回答了。
  • 我喜欢这样的想法,即 UIImage 是关于在 UI 中显示图像的内存后备存储,而不是文件表示对象。我猜MVC本质上有点分形。因此,我认为 UIImage 是“存储”图像并合法地成为我的数据模型的一部分。由于图像是一种常见的数据类型,这让我想知道它是否不应该成为较低级别框架的一部分。

标签: ios uiimage uikit foundation


【解决方案1】:

为什么 UIImage 不是 Foundation 的一部分?

为什么会这样? :)

UIImage 类用于在 iOS(以及扩展的 iOS 系列:watchOS、tvOS...)上呈现图像。对于 macOS,有 NSImage 类。

UIImage 不在 Foundation 中是有道理的,因为 Foundation 在所有平台上共享。

此外,图像不是计算系统基础的一部分,而这正是 Foundation 类试图解决的问题。

因此处理图像不应该放在 Foundation 中,而应该放在更高级别的类中,可能是针对特定平台的专用类,这就是 Apple 对 UIImage 和 NSImage 所做的。

【讨论】:

    猜你喜欢
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2014-05-08
    相关资源
    最近更新 更多