我是新手,正在尝试使用 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/