【问题标题】:Conflict AVFoundation and AppKit Swift冲突 AVFoundation 和 AppKit Swift
【发布时间】:2015-01-20 11:51:19
【问题描述】:

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

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

此代码有效,并将值“我的标题”成功分配给 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,我会遇到同样的错误。

【问题讨论】:

    标签: macos swift


    【解决方案1】:

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

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

    testitem.setValue("My title")
    

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

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

    【讨论】:

    • 这也是一个有趣的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多