macos - 冲突 AVFoundation 和 AppKit Swift

标签 macos swift

我是新手,正在尝试使用 Swift 编写代码。这个网站非常宝贵,但现在我遇到了一个问题,我一直无法找到解决方案。

我正在处理视频元数据,当我尝试在 Swift 中同时使用 AVFoundation 和 AppKit 时遇到了一个奇怪的问题。我在 Swift Playground 中将问题隔离如下:

此代码有效,成功将值“My title”分配给 testitem:

import AVFoundation

var testitem = AVMutableMetadataItem()

testitem.identifier = AVMetadataIdentifieriTunesMetadataSongName
testitem.value = "My title"

只需添加“import AppKit”语句就会导致错误:

import AVFoundation
import AppKit

var testitem = AVMutableMetadataItem()

testitem.identifier = AVMetadataIdentifieriTunesMetadataSongName
testitem.value = "My title"

错误:“无法分配给‘testitem’中的‘value’。似乎不再识别 testitem 的 value 属性。

这是怎么回事? AppKit 和 AVFoundation 之间是否存在一些不兼容? 顺便说一下,如果我用 import AVKit 替换 import AppKit,我会遇到同样的错误。

最佳答案

看来,一旦您导入 AppKit 或 AVKit,value 就会被函数 value() 包含在编译器的头脑中,函数 value() 来自 NSDictionaryControllerKeyValuePair(它是一部分该进口)。

您可以通过调用 setValue() 轻松解决该问题,例如

testitem.setValue("My title")

请注意,您必须将 value 视为函数才能获取它,例如println(testitem.value()).

正如您可以想象的那样,这在 Objective-C 中不是问题,因为在 Objective-C 中设置 value 属性与调用 相同设置值:。但是 Swift 编译器的工作方式并不完全相同。在 Swift 中,您可以看到 getter/setter 函数或属性,但不能同时看到两者。我建议将此作为 API 中的错误报告给 Apple。

关于macos - 冲突 AVFoundation 和 AppKit Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037018/

相关文章:

ios - 由于缺少入口点,场景无法访问

objective-c - 如何确定已编译的 Objective-C 应用程序是否正在使用垃圾回收?

macos - 在沙箱中的辅助应用程序和主应用程序之间进行通信

swift - 使用 RealityKit 对对象施加向下的力

ios - 使用自定义单元格中的按钮并传递对象执行 segue

ios - 在 DetailViewController 中的索引路径之间转换? swift

macos - 在 macOS 上安装没有完整 Postgres 的 psql 的正确方法?

ios - 在哪里可以找到有关 Mach 内核消息传递的良好文档

c++ - OS X 10.9 : cannot debug c++ dynamic library made with g++

c# - 异步调用API并解析JSON