J'écris dans Swift 3.0
j'ai ce code qui me donne le résultat d'avertissement d'appel est utilisé
public override init(){
super.init()
}
public init(annotations: [MKAnnotation]){
super.init()
addAnnotations(annotations: annotations)
}
public func setAnnotations(annotations:[MKAnnotation]){
tree = nil
addAnnotations(annotations: annotations)
}
public func addAnnotations(annotations:[MKAnnotation]){
if tree == nil {
tree = AKQuadTree()
}
lock.lock()
for annotation in annotations {
// The warning occurs at this line
tree!.insertAnnotation(annotation: annotation)
}
lock.unlock()
}
j'ai essayé d'utiliser cette méthode dans d'autres classes, mais il me donne toujours l'erreur, le code pour insertAnnotation est au-dessus
func insertAnnotation(annotation:MKAnnotation) -> Bool {
return insertAnnotation(annotation: annotation, toNode:rootNode!)
}
func insertAnnotation(annotation:MKAnnotation, toNode node:AKQuadTreeNode) -> Bool {
if !AKQuadTreeNode.AKBoundingBoxContainsCoordinate(box: node.boundingBox!, coordinate: annotation.coordinate) {
return false
}
if node.count < nodeCapacity {
node.annotations.append(annotation)
node.count += 1
return true
}
if node.isLeaf() {
node.subdivide()
}
if insertAnnotation(annotation: annotation, toNode:node.northEast!) {
return true
}
if insertAnnotation(annotation: annotation, toNode:node.northWest!) {
return true
}
if insertAnnotation(annotation: annotation, toNode:node.southEast!) {
return true
}
if insertAnnotation(annotation: annotation, toNode:node.southWest!) {
return true
}
return false
}
j'ai essayé de nombreuses méthodes, mais cela ne fonctionne tout simplement pas, mais dans Swift 2.2, cela fonctionne très bien. Pourquoi cela se produit-il??
Vous rencontrez ce problème car la fonction que vous appelez renvoie une valeur mais vous ignorez le résultat.
Il y a deux façons de résoudre ce problème:
Ignorer le résultat en ajoutant _ =
devant l'appel de fonction
Ajoutez @discardableResult
à la déclaration de la fonction pour faire taire le compilateur