Return 来自扩展函数的值?
Return value from Extension Function?
我有一个问题,当我 select UITextField
时,会弹出一个视图控制器,用户可以在其中输入搜索栏并通过 Google 地点 API。它看起来像这样:
//When clicking on the UITextField, this function is called
@IBAction func selectLocation(){
gpaViewController.placeDelegate = self
presentViewController(gpaViewController, animated: true, completion: nil)
}
通过 GooglePlacesAutocomplete github 我在网上找到:https://github.com/watsonbox/ios_google_places_autocomplete 下面的扩展是为我写的,所以每次你 select 来自 UITableView
从呈现的 gpaViewController
中打印出 place.description
及其 details
,如下所示:
extension EventFormController: GooglePlacesAutocompleteDelegate {
func placeSelected(place: Place){
var test: Place?
println(place.description)
place.getDetails { details in
println(details)
}
}
func placeViewClosed() {
dismissViewControllerAnimated(true, completion: nil)
}
}
但是,这样做后,我想要它,这样我就可以 return 来自 placeSelected
函数的 place.description
,如上所示,但我不太确定该怎么做所以。我试图在库中编辑 placeSelected
函数,但我认为您不能 return 来自 didSelectRowAtIndexPath
UITableView
函数的任何内容。
public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
delegate?.placeSelected?(self.places[indexPath.row])
}
关于如何 return place.description
并将 place.description
设置为 select 选项后 UITextField
内的文本的任何想法?任何帮助将不胜感激!
func placeSelected(place: Place) 是一种协议方法,您不能通过添加 return 值来更改签名而不破坏回调链,即,如果您更改协议方法的签名,它不会被调用。您应该使用它来更新您的 UI,而不是从函数中返回 place.description,例如:
func placeSelected(place: Place){
var test: Place?
println(place.description)
// update UI
textField.text = place.description // assuming that your EventFormController has reference to the textField you're trying to access
place.getDetails { details in
println(details)
}
}
不过,如果您能更具体地解释您想要实现的目标,那就更好了。我仍然不明白您的 placeSelected 和 didSelectRowAtIndexPath 实现之间的联系。
怎么样:
place.getDetails { details in
self.textField.text = details.name
}
我没有通读文档,但我相信 getDetails 是一个类似于 getDetail(completionHandler: (Details) -> Void) 的函数,其中 completionHandler 是在获取详细信息后执行的闭包。
所以我猜你在获取数据后想要做的是让视图控制器中的 textField 显示获取的信息。
我有一个问题,当我 select UITextField
时,会弹出一个视图控制器,用户可以在其中输入搜索栏并通过 Google 地点 API。它看起来像这样:
//When clicking on the UITextField, this function is called
@IBAction func selectLocation(){
gpaViewController.placeDelegate = self
presentViewController(gpaViewController, animated: true, completion: nil)
}
通过 GooglePlacesAutocomplete github 我在网上找到:https://github.com/watsonbox/ios_google_places_autocomplete 下面的扩展是为我写的,所以每次你 select 来自 UITableView
从呈现的 gpaViewController
中打印出 place.description
及其 details
,如下所示:
extension EventFormController: GooglePlacesAutocompleteDelegate {
func placeSelected(place: Place){
var test: Place?
println(place.description)
place.getDetails { details in
println(details)
}
}
func placeViewClosed() {
dismissViewControllerAnimated(true, completion: nil)
}
}
但是,这样做后,我想要它,这样我就可以 return 来自 placeSelected
函数的 place.description
,如上所示,但我不太确定该怎么做所以。我试图在库中编辑 placeSelected
函数,但我认为您不能 return 来自 didSelectRowAtIndexPath
UITableView
函数的任何内容。
public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
delegate?.placeSelected?(self.places[indexPath.row])
}
关于如何 return place.description
并将 place.description
设置为 select 选项后 UITextField
内的文本的任何想法?任何帮助将不胜感激!
func placeSelected(place: Place) 是一种协议方法,您不能通过添加 return 值来更改签名而不破坏回调链,即,如果您更改协议方法的签名,它不会被调用。您应该使用它来更新您的 UI,而不是从函数中返回 place.description,例如:
func placeSelected(place: Place){
var test: Place?
println(place.description)
// update UI
textField.text = place.description // assuming that your EventFormController has reference to the textField you're trying to access
place.getDetails { details in
println(details)
}
}
不过,如果您能更具体地解释您想要实现的目标,那就更好了。我仍然不明白您的 placeSelected 和 didSelectRowAtIndexPath 实现之间的联系。
怎么样:
place.getDetails { details in
self.textField.text = details.name
}
我没有通读文档,但我相信 getDetails 是一个类似于 getDetail(completionHandler: (Details) -> Void) 的函数,其中 completionHandler 是在获取详细信息后执行的闭包。
所以我猜你在获取数据后想要做的是让视图控制器中的 textField 显示获取的信息。