2015-11-24 2 views
0

Я пытаюсь запросить расстояние от моих пользователей. Я могу сделать это с этим кодомПреобразование строки в double в swift

PFGeoPoint.geoPointForCurrentLocationInBackground { (geoPoint: PFGeoPoint?, error: NSError?) -> Void in 

    let query = PFUser.query() 

    query?.whereKey("location", nearGeoPoint: geoPoint!, withinKilometers: 1.0) 

То, что я пытаюсь сделать это, что, когда пользователь устанавливает значение ползунка, что это значение используется вместо 1,0, как показано выше. Я пытался сделать это с помощью этого кода: Это код слайдера:

var distanceSearch: String? 

@IBAction func kmSliderValueChanged(sender: UISlider) { 

    let kmCurrentValue = Int(sender.value) 

    kmLabelUpdate.text = "\(kmCurrentValue)km" 

    distanceSearch = "\(kmCurrentValue)" 
} 

И тогда это строка запроса:

Это возвращает ошибку на линии запроса:

не может преобразовать значение типа String, к ожидаемому типу аргумента Double

Поэтому мне нужно преобразовать слайдер kmCurrentValue в double, но я не понимаю, как это сделать, читая другие вопросы SO. Я все еще достаточно хорош для кодирования в целом. Может ли кто-нибудь сказать мне, что мне нужно делать? Double класс

SO convert string to double

+0

Вы пробовали 'Double (distanceSearch!)'? – luk2302

+0

Да что сработало !!! Спасибо, вы добавите его в качестве ответа, и я отметю его! – Grace

+1

Почему вы конвертируете из 'Int' в' String', чтобы преобразовать его в 'Double'? – Wain

ответ

0

Просто преобразовать distanceSearch к Double с помощью инициализатора:

query?.whereKey("location", nearGeoPoint: geoPoint!, withinKilometers: Double(distanceSearch!)!) 
+1

Почему вы не рекомендуете не сохранять значение в виде строки? – Wain

+0

@Wain, потому что он спросил, как преобразовать его в Double. Я не просмотрел его код, чтобы убедиться, что на самом деле это необходимо для него, в первую очередь. Как вам кажется, вы правы, что он делает ненужную работу. – luk2302

+0

Это исправление, которое я запросил, и его работа, может быть, мой код беспорядок, но это фиксировало мою немедленную проблему, как указано выше. Благодарю. – Grace

0

Свифта имеет конструктор, который принимает строку в качестве аргумента, так что вы могли бы сделать Double(distanceSearch!) как @ luk2302 предложил в комментариях.

Этот результат возвращает необязательный параметр Swift, поэтому вы должны сделать Double(distanceSearch!)!, чтобы развернуть необязательный элемент, возвращаемый конструктором Double. Взгляните на the Apple documentation on that Double constructor.

+0

эй vigneshv я суппер предложил эти изменения для luk2302s ответ спасибо. – Grace

0

Есть много способов преобразования String в Double. Вы можете использовать инициализатор по умолчанию:

Double("23.0") 

Или конвертировать в NSString и использовать метод doubleValue.

("23.0" as NSString).doubleValue 

Есть еще одна вещь, которую нужно делать, когда вы имеете дело с необязательным.

let str: String? = ... 

Тогда вы можете попытаться силой разворачивать его:

Double(str!) 

Но это приведет к краху, когда ваша строка в nil. Более безопасный способ:

Double(str ?? "0") 

Этот номер по умолчанию будет равен нулю.

+0

... по умолчанию будет использоваться дополнительный бит. – user3441734

+0

Он по умолчанию будет иметь необязательный double со значением '0', если строка' nil'. – Adam

0

Нет причин для всего этого направления. Сам ползунок дает вам двойной. Вам не нужно преобразовывать его в строку, а затем обратно в двойную. Просто используйте value со слайдера.

+0

Извините, может быть, я должен был указать в моем вопросе, но слайдер находится на другом контроллере View, чтобы сохранить его значение. Я хранил его как таковой. Вы бы предложили сохранить его как Int вместо строки? – Grace

+0

@grace Если вам нужен двойной, почему бы вам не сохранить его как двойник? (Кроме того, один контроллер представлений должен почти никогда не захватывать свойства с другого контроллера представления. И класс модели никогда не должен никогда читать информацию о контроллере представления. Это говорит о том, что вы нарушаете MVC.) Но да, сохранение числа в виде строки, вероятно, никогда не верный ответ. –

+0

Я установил его таким образом, так как контроллер 1 просмотра представляет собой страницу настроек, поэтому пользователь устанавливает расстояние, на которое они хотят искать пользователей. Затем на VC2 он отображает только пользователей в настройке расстояния, которая была установлена ​​на VC1. Возможно, я все испортил, я очень новичок в разработке приложений .... Я попытался сохранить его как Double на VC1, но он вернул больше ошибок. – Grace

Смежные вопросы