作者:mobiledu2502926601 | 来源:互联网 | 2023-02-01 18:09
这就是我想要做的事情:
import Foundation
import UIKit
protocol PlayableMediaItem {
func title() -> String
func albumArt() -> UIImage
func audioFileURL() -> URL
}
struct AudioTrack : Codable, PlayableMediaItem {
var title: String
var desc:String
var albumArtDemoName:String
var audioDemoFilename:String
func albumArt() -> UIImage {
let image = UIImage(named: albumArtDemoName)
return image!
}
func audioFileURL() -> URL {
return Bundle.main.url(forResource: audioDemoFilename, withExtension: "mp3")!
}
}
但我得到AudioTrack不符合PlayableMediaItem协议的错误,因为该title
属性不是方法,它是属性.
我怎样才能设置此让title
,albumArt
等可以实现为两种属性或方法,只要他们给我回到正确的类型?
我的一些实现可能只是属性,而其他的是计算.
1> NobodyNada -..:
只需将其声明为协议中的属性,并使用计算属性而不是使用方法:
import Foundation
import UIKit
protocol PlayableMediaItem {
var title: String { get }
var albumArt: UIImage { get }
var audioFileURL: URL { get }
}
struct AudioTrack : Codable, PlayableMediaItem {
var title: String
var desc:String
var albumArtDemoName:String
var audioDemoFilename:String
var albumArt: UIImage {
let image = UIImage(named: albumArtDemoName)
return image!
}
var audioFileURL: URL {
return Bundle.main.url(forResource: audioDemoFilename, withExtension: "mp3")!
}
}