Ios 类型';标题';具有不同于协议要求的可选性';MKAnnotation';
我遵循了swift中的Ray Wenderlich MapKit教程:当我创建Artwork类时,我在标题中写下了错误。我不知道我该怎么办。 代码如下:Ios 类型';标题';具有不同于协议要求的可选性';MKAnnotation';,ios,iphone,swift,mapkit,ios9.1,Ios,Iphone,Swift,Mapkit,Ios9.1,我遵循了swift中的Ray Wenderlich MapKit教程:当我创建Artwork类时,我在标题中写下了错误。我不知道我该怎么办。 代码如下: class Artwork: NSObject, MKAnnotation { let title: String let locationName: String let discipline: String let coordinate: CLLocationCoordinate2D init(title: String, locatio
class Artwork: NSObject, MKAnnotation {
let title: String
let locationName: String
let discipline: String
let coordinate: CLLocationCoordinate2D
init(title: String, locationName: String, discipline: String, coordinate: CLLocationCoordinate2D) {
self.title = title
self.locationName = locationName
self.discipline = discipline
self.coordinate = coordinate
super.init()
}
}
请帮忙 答案在文档中:我们在页面上看到属性
title
必须是可选的
这正是错误消息告诉您的:标题的可选性不正确
相应地更改它:
class Artwork: NSObject, MKAnnotation {
var title: String?
let locationName: String
let discipline: String
let coordinate: CLLocationCoordinate2D
init(title: String, locationName: String, discipline: String, coordinate: CLLocationCoordinate2D) {
self.title = title
self.locationName = locationName
self.discipline = discipline
self.coordinate = coordinate
super.init()
}
}
var title: String?
var subtitle: String?
ProTip:在Xcode中,CMD+单击您的对象或定义(
MKAnnotation
,在您的示例中),查看协议的声明方式及其要求。MKAnnotation协议要求标题为可选类型:
public protocol MKAnnotation : NSObjectProtocol {
// Center latitude and longitude of the annotation view.
// The implementation of this property must be KVO compliant.
public var coordinate: CLLocationCoordinate2D { get }
// Title and subtitle for use by selection UI.
optional public var title: String? { get }
optional public var subtitle: String? { get }
}
只需将title变量声明为:
让title:String?
这个问题就会消失。除了上面提到的之外
截至2016年swift 3
如果您遵循上述教程,则需要解决以下问题:
字幕:字符串{
返回位置名称}
致:
公共变量字幕:字符串{
返回位置名称}
希望也能澄清一些事情相应地改变它:
class Artwork: NSObject, MKAnnotation {
var title: String?
let locationName: String
let discipline: String
let coordinate: CLLocationCoordinate2D
init(title: String, locationName: String, discipline: String, coordinate: CLLocationCoordinate2D) {
self.title = title
self.locationName = locationName
self.discipline = discipline
self.coordinate = coordinate
super.init()
}
}
var title: String?
var subtitle: String?