Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 类型';标题';具有不同于协议要求的可选性';MKAnnotation';_Ios_Iphone_Swift_Mapkit_Ios9.1 - Fatal编程技术网

Ios 类型';标题';具有不同于协议要求的可选性';MKAnnotation';

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

我遵循了swift中的Ray Wenderlich MapKit教程:当我创建Artwork类时,我在标题中写下了错误。我不知道我该怎么办。 代码如下:

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?