Swift:单例类从协议“扩展”

问题描述 投票:0回答:1

我正在尝试从协议创建一个单例类,我的目的是拥有多个 xxxxxHandler,例如。 SpotifyHandler、AppleMusicHandler 等等...并在用户使用其音乐帐户登录时创建正确的处理程序,然后使处理程序在整个程序中均可访问。

但是当我尝试制作 SpotifyHandler 时,我遇到了这个错误:

Property 'shared' in non-final class 'SpotifyHandler' must specify type 'Self' to conform to protocol 'MusicHandler'

在此行:

static var shared: SpotifyHandler = SpotifyHandler()

这是单例类和协议的代码(单独的文件)

import Foundation
import SwiftUI

class SpotifyHandler : MusicHandler {
    static var shared: SpotifyHandler = SpotifyHandler()
    
    var is_logged_in: Bool = false;
 
    func set_is_logged_in(is_logged_in: Bool) {
        self.is_logged_in = is_logged_in
    }
    
    func print_status() {
        print("--- Status ---")
        print("Is logged in: \(self.is_logged_in)")
    }
}


public protocol MusicHandler {
    static var shared: Self { get }
    
    var is_logged_in: Bool { get }
    
    func set_is_logged_in(is_logged_in: Bool)
    func print_status()
}

我对 swift 很陌生,但有其他语言的经验,如果您有的话,我愿意接受有关解决此问题的替代方法的建议。 :)

swift syntax-error singleton protocols
1个回答
0
投票

如果您可以使用

MusicHandler
而不是
Self

来解决
public protocol MusicHandler {
    static var shared: MusicHandler { get }


class SpotifyHandler : MusicHandler {
    static var shared: MusicHandler = SpotifyHandler()
© www.soinside.com 2019 - 2024. All rights reserved.