您能告诉我如何在iOS故事板中初始化Singleton吗?到目前为止,我的理解是标准模式在我们希望成为单例的类中看起来像这样,并且此代码有效:
class var sharedInstance: LibraryAPI {
struct Singleton {
static let instance = LibraryAPI()
}
return Singleton.instance
}
我正在制作一个依赖AVPlayer播放音频的自定义MusicPlayer对象。我希望这个MusicPlayer在应用程序激活后立即存在。目前,MusicPlayer是在Storyboard中创建的,允许我使用IBOutlets和IBActions将按钮和标签连接到MusicPlayer。挑战是当我导航到viewController堆栈时,MusicPlayer被释放。如下图所示。
我可以覆盖哪些方法来查看故事板何时创建和销毁MusicPlayer?到目前为止,您可以看到重写init()被调用但是deinit不是。我没有运气在文档或网上找到答案。
有可能有更好的方法来设计这个应用程序。我认为Singleton很有意义,因为应该只有一个MusicPlayer。只有它的状态会在应用程序的整个生命周期中发生变化。
感谢您的建议。
答案 0 :(得分:1)
class var sharedInstance: LibraryAPI {
struct Singleton {
static let instance = LibraryAPI()
}
return Singleton.instance
}
这看起来非常复杂。您通常可以使用:
final class MusicPlayer {
let sharedInstance = MusicPlayer()
init() {}
}
如果Something
不是final
,事情确实会变得复杂一些,但通常它可以用于单身人士。
目前,MusicPlayer在故事板中创建,允许我使用IBOutlets和IBActions将按钮和标签连接到MusicPlayer。
这不会奏效。有关我的问题版本,请参阅rdar:25450179。 Apple的最新解释是,这可能无法修复。这需要对Storyboard进行过多的重新设计。他们可能会改变主意,但这是一个很大的改变。
你最接近的就是通过你的班级揭露单身人士。
class MyClass: UIViewController {
var musicPlayer: MusicPlayer { return MusicPlayer.sharedInstance() }
}
但这可能也不会做你想做的事情。通常,您需要将IBOutlet直接绑定到视图控制器。然后,视图控制器可以根据需要代理其他对象。