import UIKit
import MediaPlayer
我得到一个错误,说'playMusicViewController'类没有初始化器,我不确定为什么我需要在视图控制器类中使用初始化器,因为我的其他视图控制器没有视图初始化器
class playMusicViewController: UIViewController {
var play : MPMusicPlayerController
var selectedSong : MPMediaItemCollection
@IBAction func play (sender: AnyObject){
func playMusic() -> MPMusicPlayerController {
var musicPlayer: MPMusicPlayerController = MPMusicPlayerController()
return musicPlayer
}
playMusic()
}
override func viewDidLoad() {
super.viewDidLoad()
func prepareToPlay() -> Bool{
let myplayer = MPMusicPlayerController.applicationMusicPlayer()
myplayer.setQueueWithItemCollection(selectedSong)
play = myplayer
myplayer.play()
return true
}}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
答案 0 :(得分:1)
因为每个var都应该在Swift中初始化,否则会抱怨。
如果您不想初始化变量,可以将变量设为可选变量,并且最初会为它们分配nil
。
var play : MPMusicPlayerController?
var selectedSong : MPMediaItemCollection?
在创建该类或结构的实例时,类和结构必须将其所有存储属性设置为适当的初始值。存储的属性不能保留在不确定的状态。
您可以在初始值设定项中设置存储属性的初始值,或者通过将默认属性值指定为属性定义的一部分
答案 1 :(得分:0)
在swift中,所有变量都必须在super.init之前初始化,除非声明是可选的,在你的情况下你有两个需要初始化的变量
var play : MPMusicPlayerController
var selectedSong : MPMediaItemCollection
您可以通过声明变量optional
来避免创建初始值设定项var play : MPMusicPlayerController?
var selectedSong : MPMediaItemCollection?
或者你可以避免必须通过事先初始化变量来创建初始化程序(如果你不需要传递任何值
var play = MPMusicPlayerController()
var selectedSong = MPMediaItemCollection()
如果您需要传递值,您也可以使用延迟初始值设定项
您可以找到有关延迟初始化here
的更多信息答案 2 :(得分:0)
在swift中,我们必须以下列方式初始化var -
可选属性
懒惰属性
属性具有默认值
在你的情况下,你不要初始化var
var play : MPMusicPlayerController
var selectedSong : MPMediaItemCollectio
你可以像下面那样初始化它们 -
var play : MPMusicPlayerController?
var selectedSong : MPMediaItemCollection?
var play = MPMusicPlayerController()
var selectedSong = MPMediaItemCollection()
希望它可以帮助你。
答案 3 :(得分:0)
在创建该类或结构的实例时,类和结构必须将其所有存储属性设置为适当的初始值。存储的属性不能保留在不确定的状态。
在您的情况下,play
和selectedSong
是存储的属性。
//Snippet from your code
var play : MPMusicPlayerController
var selectedSong : MPMediaItemCollection
为了初始化play
和selectedSong
,编译器会抛出错误,以便在使用类之前它具有初始化属性的适当位置。这就是你需要初始化的原因。
注意:添加初始化是将属性初始值分配的一种方法。有关更多方法,请参阅Initialisers。