A NumberFormatException
означает, что Integer.parseInt()
не может перевести строку в число.
Я бы предложил один из двух вариантов:
Cards[]
затем становится списком карт, а не строками. if(cards[index].startsWith("Ace")) { value = 1; }
. Вы можете переместить их в функцию под названием CardToInt()
(или что-то еще) и использовать эту функцию вместо Integer.parseInt()
. Добавьте CLLocationManagerDelegate
к вашему наследованию класса, а затем вы можете выполнить эту проверку: Swift 1.x - 2.x версия:
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .NotDetermined, .Restricted, .Denied:
print("No access")
case .AuthorizedAlways, .AuthorizedWhenInUse:
print("Access")
}
} else {
print("Location services are not enabled")
}
версия Swift 3.0:
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .notDetermined, .restricted, .denied:
print("No access")
case .authorizedAlways, .authorizedWhenInUse:
print("Access")
}
} else {
print("Location services are not enabled")
}
SWIFT (по состоянию на 24 июля 2018 года)
if CLLocationManager.locationServicesEnabled() {
}
это скажет вам, что пользователь уже установил настройку для местоположения
Запросить разрешение для служб местоположения, которые вы используете:
yourSharedLocationManager.requestWhenInUseAuthorization()
Если состояние в настоящее время не определено, предупреждение покажет запрос пользователю разрешить доступ. Если доступ запрещен, ваше приложение будет уведомлено в CLLocationManagerDelegate, так же, если разрешение будет отклонено в любой момент, вы будете обновлены здесь.
Для определения текущих разрешений необходимо проверить два отдельных состояния.
CLLocationManager.locationServicesEnabled()
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Вы можете добавить расширение - это удобная опция:
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}
Здесь он обращается, когда пользователь сначала запросил направления:
private func requestUserLocation() {
//when status is not determined this method runs to request location access
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
//have accuracy set to best for navigation - accuracy is not guaranteed it 'does it's best'
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
//find out current location, using this one time request location will start the location services and then stop once have the location within the desired accuracy -
locationManager.requestLocation()
} else {
//show alert for no location permission
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Вот делегат:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
В Swift 3.0
if (CLLocationManager.locationServicesEnabled())
{
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
if ((UIDevice.current.systemVersion as NSString).floatValue >= 8)
{
locationManager.requestWhenInUseAuthorization()
}
locationManager.startUpdatingLocation()
}
else
{
#if debug
println("Location services are not enabled");
#endif
}
Когда вы вызываете -startLocation, если службы определения местоположения были отклонены пользователем, делегат менеджера местоположений получит вызов - locationManager:didFailWithError
: с кодом ошибки kCLErrorDenied
. Это работает как во всех версиях iOS.
Use of unresolved identifier 'kCLErrorDenied'
. Мысли?
– Brendan Chang
18 January 2016 в 20:00
Для swift3.0 и выше, если для доступности служб определения местоположения выполняются частые проверки, создайте такой класс, как показано ниже,
import CoreLocation
open class Reachability {
class func isLocationServiceEnabled() -> Bool {
if CLLocationManager.locationServicesEnabled() {
switch(CLLocationManager.authorizationStatus()) {
case .notDetermined, .restricted, .denied:
return false
case .authorizedAlways, .authorizedWhenInUse:
return true
default:
print("Something wrong with Location services")
return false
}
} else {
print("Location services are not enabled")
return false
}
}
}
, а затем используйте его в своем VC
if Reachability.isLocationServiceEnabled() == true {
// Do what you want to do.
} else {
//You could show an alert like this.
let alertController = UIAlertController(title: "Location
Services Disabled", message: "Please enable location services
for this app.", preferredStyle: .alert)
let OKAction = UIAlertAction(title: "OK", style: .default,
handler: nil)
alertController.addAction(OKAction)
OperationQueue.main.addOperation {
self.present(alertController, animated: true,
completion:nil)
}
}
Это всего лишь 2-строчная функция в Swift 4:
import CoreLocation
static func isLocationPermissionGranted() -> Bool
{
guard CLLocationManager.locationServicesEnabled() else { return false }
return [.authorizedAlways, .authorizedWhenInUse].contains(CLLocationManager.authorizationStatus())
}
manager.locationServicesEnabled()
, а неCLLocationManager.loationServicesEnabled()
Solved! – Brendan Chang 18 January 2016 в 20:24authorizationStatus
будет установить i> наnotDetermined
, а вместо того, чтобы просто регистрировать, было бы лучше запросить пользователь «Разрешить / Не разрешать»; – Honey 1 May 2017 в 19:25