2015-07-30 2 views
2

Я пытаюсь поделиться текстом с WhatsApp, но NSURL всегда возвращает ноль, но текст закодирован правильно! посмотрите на мой код:WhatsApp NSURL возвращает nil При совместном использовании текста - Swift

var msg : NSString = "to the world of none"; 
var titlewithoutspace = msg.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) 
var urlWhats = NSString(string: "whatsapp://send?text=\(titlewithoutspace)") 
println(urlWhats) 
var whatsappURL = NSURL(string: urlWhats as String) 
println(whatsappURL) 

, когда я печать результат строка равна:

whatsapp://send?text=Optional("to%20the%20world%20of%20none") 

и whatsappURL возвращение всегда ноль:

nil 
+0

в течение 5 минут мне было интересно, откуда «Необязательный» входит в вашу выходную строку? –

+0

Да, я тоже об этом думал! :) – AaoIi

+0

проверить Sulthan ответ .. это поможет вам ... –

ответ

4

stringByAddingPercentEscapesUsingEncoding: возвращает дополнительный String, поэтому urlWhats содержит Optional(""). Чтобы избежать этого вам просто нужно разворачивать опциональный так:

var msg: NSString = "to the world of none"; 
var titlewithoutspace = msg.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) 
if let titlewithoutspace = titlewithoutspace { 
    var urlWhats = NSString(string: "whatsapp://send?text=\(titlewithoutspace)") 
    var whatsappURL = NSURL(string: urlWhats as String) 
    println(whatsappURL) 
} else { 
    // Unwrapping failed because titlewithoutspace is nil (might be because stringByAddingPercentEscapesUsingEncoding failed). 
} 

Кроме того, я предлагаю вам использовать тип String, непосредственно так NSString бесполезно для вас там (за stringByAdding… исключением):

var msg: NSString = "to the world of none"; 
var titlewithoutspace = msg.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) 
if let titlewithoutspace = titlewithoutspace { 
    var urlWhats = "whatsapp://send?text=\(titlewithoutspace)" 
    var whatsappURL = NSURL(string: urlWhats) 
    println(whatsappURL) 
} else { 
    // Unwrapping failed because titlewithoutspace is nil (might be because stringByAddingPercentEscapesUsingEncoding failed). 
} 

Также обратите внимание, что NSURL(string:) может не работать, поэтому он также возвращает дополнительный объект NSURL. Чтобы использовать его, вам может понадобиться развернуть его, как и я, для titlewithoutspace.

3

Использование \(...) должно зарезервированы для записи в консоль. Как вы можете видеть, он добавляет Optional(....) вокруг вашей строки, и это неверно для URL-адреса.

Либо заставить его разворачивать "whatsapp://send?text=\(titlewithoutspace!)" или лучше, используйте

String(format: "whatsapp://send?text=%@", titlewithoutspace) 
+1

Строчная интерполяция может быть использована безопасно, почему она будет зарезервирована для консольной записи ಠ_ಠ? – Fantattitude

1

Для Swift 2,0/2,1

func openURL(urlString: String, message: String) { 
    var formattedURL: String = urlString 

    if let strippedMessage = message.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()) { 
     formattedURL = "\(urlString)\(strippedMessage)" 
    } 

    if let url = NSURL(string: formattedURL) as NSURL? { 
     print(url) 
     UIApplication.sharedApplication().openURL(url) 
    } 
} 
0

Вот проверенный код Sharing в быстрой

let url = NSURL(string: "whatsapp://send?text=https%3A%2F%2Fitunes.apple.com%2Fin%2Fapp%2Fwhatsapp-messenger%2Fid310633997%3Fmt%3D8") 

if UIApplication.sharedApplication().canOpenURL(url!) { 
     UIApplication.sharedApplication().openURL(url!) 
} 
else { 
     let errorAlert = UIAlertView(title: "Cannot Send Message", message: "Your device is not able to send WhatsApp messages.", delegate: self, cancelButtonTitle: "OK") 
     errorAlert.show() 
     } 

Примечание: Вам просто нужно преобразовать URL для кодирования Отформатируйте

+0

Я просто даю ссылку .. я удалю, если вы так думаете –

+1

Спасибо за редактирование. Это намного лучше без ссылки. :) – Moritz

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