Swift 3.0 Результат вызова не используется

Я пишу в свифт 3.0

у меня есть этот код, который дает мне предупреждение о том, что вызов не используется

        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()
        }

я пытался использовать этот метод в других классах, но он все еще дает мне ошибку, код для вставки аннотации выше

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

    }

Я пробовал много методов, но просто не работает, но в Swift 2.2 все работает нормально, есть идеи, почему это происходит ??


person Aryan Kashyap    schedule 04.07.2016    source источник
comment
Это говорит вам правду. Ваша функция возвращает Bool, и вы игнорируете этот факт при вызове. Если это то, что вы хотите сделать, и вы хотите закрыть предупреждение, измените вызов на _ = tree!.insertAnnotation(annotation: annotation).   -  person pjs    schedule 05.07.2016
comment
См. эту тему: Результат вызова myFunction не используется.   -  person OOPer    schedule 05.07.2016
comment
@discardableResult stackoverflow.com/a/27261991/2303865   -  person Leo Dabus    schedule 05.07.2016


Ответы (1)


Вы получаете эту проблему, потому что функция, которую вы вызываете, возвращает значение, но вы игнорируете результат.

Есть два способа решить эту проблему:

  1. Игнорируйте результат, добавив _ = перед вызовом функции.

  2. Добавьте @discardableResult к объявлению функции, чтобы отключить компилятор.

person David Skrundz    schedule 05.07.2016
comment
С одной стороны, вы можете поставить @discardableResult один раз и исправить их все, но с другой стороны, вы не можете сделать это со своими модулями, поэтому вам нужно использовать 1-е решение. - person Ossir; 12.10.2016
comment
Что вы имеете в виду под этим Оссиром? Вы не можете использовать его с CocoaPods? - person gran_profaci; 17.10.2016
comment
@gran_profaci Возможно, вы используете чужой код (через Pods или где-то еще) и не можете изменить определение интерфейса кода, и в этом случае _ = является единственным решением. - person Andree; 18.10.2016
comment
@discardableResult идеален;) в настоящее время работает над миграцией swift3! - person RichAppz; 09.11.2016
comment
Кто определил такое поведение для Swift!? Я хотел бы подавить это предупреждение с помощью некоторой опции компилятора, это довольно раздражает и бесполезно. - person Ferran Maylinch; 19.04.2017
comment
2) — совершенно элегантное решение. - person Josh; 27.12.2017