Swift2 中的 AVAsset

AVAsset in Swift2

if let url = song.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL {
         audioAsset = (AVAsset.assetWithURL(url))

Xcode7 使用 AVAsset 时出现一些错误。 错误说:

'assetWithURL' 不可用:使用对象构造 'AVAsset(URL:)'

一段时间后我找到了这个解决方案:

                audioAsset = AVAsset(URL: url)

但我不知道这与此处针对 Swift2 编写的文档所说的内容有什么关系。您为什么不将此处的 NSURL 类型明确写入代码中?看起来有点乱。

便利初始化(URL url: NSURL)

(我将其标记为一个骗局,因为我们之前已经看到过无数这样的问题,但我目前找不到 well-generalized 候选人... )

总的来说:

当您看到如下所示的 Swift 界面时:

class Foo {
    init(thing: String)
}

你这样称呼它:

let myFoo = Foo(thing: "some text")

这就是编译器所说的 "object construction" 语法。

(当然,将 FoothingString"some text" 适当地替换为实际类型和这些类型的实例。)

请参阅 Swift 编程语言 的开篇 "A Swift Tour" 章中的 Objects and Classes。本章确实是任何人入门时都应该阅读的第一本书 Swift。


顺便说一句,无论您在上述 Swift 接口中看到的初始化程序最初来自 Swift,还是从 Objective-C 声明中导入,都是如此以下之一:

@interface Foo: NSObject

+ (Foo *)fooWithThing:(NSString *)thing;

- (instancetype)initWithThing:(NSString *)thing;

@end