2017-09-21 17 views
0

ガードステートメントで 'nextPage'という関数を呼び出そうとしていますが、 '()'は 'Bool'に変換できません。私は(Swift)ガードステートメントの呼び出し関数

@IBAction func nextPressed(_ sender: Any) { 
    let geoCoder = CLGeocoder() 
    geoCoder.geocodeAddressString(address) { (placemarks, error) in 
     guard 
      let placemark = placemarks?.first, 
      let latVar = placemark.location?.coordinate.latitude, 
      let lonVar = placemark.location?.coordinate.longitude, 
      nextPage() // Error - '()' is not convertible to 'Bool' 
      else { 
       print("no location found") 
       return 
     } 
    } 
} 

答えて

2

ような何かを行う必要があり、ガード文は、特定の条件が満たされたかどうかをチェックするために使用されます。 その文で真または偽を返さない関数を置くことはできません。

参考: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html

私が何を達成しようとしていること

@IBAction func nextPressed(_ sender: Any) { 
     let geoCoder = CLGeocoder() 
     geoCoder.geocodeAddressString(address) { (placemarks, error) in 
      guard 
       let placemark = placemarks?.first, 
       let latVar = placemark.location?.coordinate.latitude, 
       let lonVar = placemark.location?.coordinate.longitude 
       else { 
        print("no location found") 
        return 
      } 

      // will only get executed of all the above conditions are met 
      nextPage() // moved outside the guard statement 

     } 
} 
であると信じています
0

あなたはブール値を返す関数を呼び出す必要があるか、それが機能を呼び出すための適切な場所ではないので、ガード述語文の中、このような事をしていないこの関数を呼び出すために何をする必要があります。 あなたが

guard variable != nil else { 
    //handle nil case 
} 

// continue work with variable, it is guaranteed that it’s not nil. 
関連する問題