Как вы гарантируете, что одна часть быстрой функции будет завершена раньше, чем другая часть функции?

Итак, что делает это сложным, так это то, что часть B не является недействительной (то есть возвращаемой). Это затрудняет (и пока безуспешно - я пытался) использовать Defer или Dispatch Groups.

Функция

Эта функция вызывается при длительном нажатии. Это стандартный быстрый contextMenuInteraction. Обычно при длительном нажатии выполняется вызов базы данных, чтобы проверить, имеет ли что-то в базе данных значение 0 или 1. В зависимости от результата возвращается 1 из 2 других изображений VC.

Почему я не могу просто представить изображение внутри вызова части A db?

Это не сработает, потому что contextMenuInteraction находится в классе UITableViewCell. Я мог бы использовать делегат, но это невозможно, потому что ячейка в VC занимает весь экран. Поэтому, если я выступаю с делегатом, он занимает весь экран. Я уже пробовал это.

Что должно произойти ?:

При долгом нажатии вызывается contextMenuInteraction. Внутри него часть A, которая проверяет DB, должна запускаться перед частью B, которая возвращает изображение VC на основе вызова Db.

      func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
UIContextMenuConfiguration(identifier: nil, previewProvider: { [self] in

        func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
    UIContextMenuConfiguration(identifier: nil, previewProvider: { [self] in
        //part a
        if self.postID != nil {
            
            
            let r1 = Database.database().reference().child("switch").child(self.postID).child("switch")
            r1.observeSingleEvent(of:.value,  with: { [self]snapshot in
                if snapshot.exists() {
                    print("Got data \(snapshot.value!)") //will print true or false
                    let ab = snapshot.value!
                    if ab as! Int>0 {
                        f = false
                        print("true1")
                        
                    } else {
                        
                        print("true2")
                        r = false
                        
                    }
                }
                else {
                    print("No data available")
                }
                
            })
            
            
        }
        
        print("dam")
        
        print("dam1")
        
        //part b
        
        if self.dd == interaction {
            if let unwrappedImage = self.immy.image {
                return ImagePreviewController(image:unwrappedImage)
                
            }
            else {
                return nil
            }
            // put dd stuff here
        }
        
        else if self.f == false {
            
            let image3 = UIImage(named:"ringy.png")
            
            if let unwrappedImage1 = image3 {
                return ImagePreviewController(image:unwrappedImage1)
                
            }
            else {
                return nil
            }
            
            // put dd stuff here
        }
        
        else if self.r == false {
            // put cc stuff here
            let image3 = UIImage(named:"green.png")
            
            if let unwrappedImage1 = image3 {
                return ImagePreviewController(image:unwrappedImage1)
                
            }
            
            else {
                return nil
            }
            
        }
        
        return nil
        
    })
    
    
    
}

Последнее замечание: вы можете пойти в обратном направлении с установкой и тестированием истинной iso, как и я здесь. Значение по умолчанию истинно для обоих в override func прямо сейчас.

0 ответов

Другие вопросы по тегам