AVPlayer无法为类型分配类型的值

问题描述 投票:-1回答:2

我最近将我的代码升级到swift 3,并且我在我的应用程序中有2个与AVPlayer相关的错误。

编辑:这是声明:

public var avPlayer = AVPlayer()
public var avPlayerItem = AVPlayerItem?.self

这是我引用的功能:

func stream() {
    let urlString = streamURLForSong
    let urlItem = URL(string: urlString)
    avPlayerItem = AVPlayerItem(url: urlItem!) // ERROR: Cannot assign value of type 'AVPlayerItem' to type 'AVPlayerItem?.Type?'
    avPlayer = AVPlayer(playerItem: avPlayerItem!) // ERROR: Cannot convert value of type 'AVPlayerItem?.Type' (aka 'Optional<AVPlayerItem>.Type') to expected argument 'AVPlayerItem?'
}

这之前有效,但在使用Xcode升级到Swift 3之后,会显示上面评论的错误。

我该如何解决?

提前致谢!

ios swift3 avplayer avplayeritem
2个回答
1
投票

这段代码错了:

public var avPlayerItem = AVPlayerItem?.self

删除.self。该代码使这成为一种类型,而您希望实例进入此处。现在删除=并使用:来声明类型。

举个简单的例子,这段代码是非法的:

var x = String?.self
x = "howdy" // compile error

这就是我们所需要的:

var x : String?
x = "howdy"

1
投票

我能够通过在Xcode游乐场中稍作修改来编译此函数。我的版本看起来像这样:

import AVFoundation

func stream() {  
    let urlString = "http://google.com"
    let urlItem = URL(string: urlString)
    let avPlayerItem: AVPlayerItem? = AVPlayerItem(url: urlItem!) // ERROR: Cannot assign value of type 'AVPlayerItem' to type 'AVPlayerItem?.Type?'
    let avPlayer = AVPlayer(playerItem: avPlayerItem) // ERROR: Cannot convert value of type 'AVPlayerItem?.Type' (aka 'Optional<AVPlayerItem>.Type') to expected argument 'AVPlayerItem?'
}

我把urlString作为一个虚拟地址,并且还改变了最后一行,这样我们就不会强行解开你的AVPlayerItem,当它传递给AVPlayer时。

编辑:

如果您试图告诉Swift avPlayerItem使用什么数据类型,您希望使用以下语法:

public var avPlayerItem: AVPlayerItem

您所做的是将类本身指定为avPlayerItem变量的内容,因此数据类型实际上是AVPlayerItem?.Type?而不是AVPlayerItem?

© www.soinside.com 2019 - 2024. All rights reserved.