2016-04-11 48 views
17

Bana yardım etmeliydim this question buldum, ama çözüm benim için çalışmıyor ve bir şey değişmiş mi, yoksa sorun benim kodumdan mı emin değilim. Bu kodu yürütüldüğünde Önceden ayarlanmış gövdeye sahip WatchKit SMS'i

let messageBody = "hello" 
let urlSafeBody = messageBody.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet()) 
print("URLSAFEBODY: \(urlSafeBody)") 
WKExtension.sharedExtension().openSystemURL(NSURL(string: "sms:&body=\(urlSafeBody)")!) 

, ben urlSafeBody oldu kuvvet bir kaza neden nil ise açılmamış bağlı bir mesaj olsun. Neden urlSafeBody nil? Biliyorum, onu açmaya zorluyorum, ama neden açıkça belirlendikten sonra nil olduğunu hiç anlayamıyorum.

+4

Bu geçerli bir soru, oylamaya gerek yok .. – dbf

cevap

9

Bu, urlSafeBody değil nil.

URLSAFEBODY: İsteğe bağlı ("Merhaba")

aslında sonrakinde zinciri için bir sorun olduğu ortaya dönecek size baskı deyimi de görebileceğiniz gibi, isteğe bağlı bir dize içeren deyim, bu dizgeyi konuşmadan önce açmamışsınızdır. Eğer NSURL dize URL incelendiğinde ise

, bunu içerdiği görürdük:

sms: & vücut = Opsiyonel ("Merhaba") Bu kadar NSURL başlatma neden oluyor

başarısız, çünkü onun dize URL'si bozuk.

Sen şartlı sıfır olabilecek dizeleri paketini istiyorum: önemli hata ardından nedeniyle bu sorunu çözmek için nasıl NSURL(string:)

gelen nil sonucu zorla açtım olur. Sen if let veya isteğe bağlı guard let bağlayıcı aracılığıyla yapabilirsiniz: urlSafeBody o dize enterpolasyon kullanılmıştır önce unwrapped edildi ve url da başlatmasından sonra unwrapped olduğu

let messageBody = "hello" 
let urlSafeBody = messageBody.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet()) 
if let urlSafeBody = urlSafeBody, url = NSURL(string: "sms:&body=\(urlSafeBody)") { 
    WKExtension.sharedExtension().openSystemURL(url) 
} 

dikkat edin.

URL'nin sıfır olmadığından emin olduğu için, openSystemURL'a güvenli bir şekilde geçirilebilir.

Kesintisiz olabilecek değişkenleri önlemek için her zaman çaba göstermelisiniz;