2016-03-21 21 views
-2

Aşağıdaki kod var:İsteğe bağlı parametre değerleri ile nil denetimi nasıl yapılır?

@IBAction func search(sender: AnyObject) { 
    let searchWord = searchQ.text 
    let r = searchRadius.text 
    let latitude = searchLat.text 
    let longitude = searchLon.text 
    customSearch(searchWord!, radius: r!, lat: latitude!, lon: longitude!) 
} 

searchword, r ise

nasıl kontrol edebilirim durumda kullanıcı bir şey koymuyor ayarlanan varsayılan parametreleri vardır customSearch yöntem, yani ..., Enlem ve boylam sıfırdır. Nil ise, o zaman customSearch işlevleri varsayılan parametrelerini kullanın, aksi halde hangileri sağlandıysa ve kalanını varsayılan değerlerle doldurun mu?

Oh ve bir textfield değerini alacak, bunu, bu nil boş değil var ama boş bir dize .. bu yüzden aşağıdaki eklendi görünüşte ise ayrıntılı bilgi vermekten:

func customSearch(q:String = "", radius:String = "25", lat:String = "33.960", lon:String = "-118.4179") { 
    let geoSearchWord = (q == "" ? q : "geoSearchWord=\(q)") 
    let geoSearchLat = (lat == "" ? "33.960" : "&geoSearchWordLat=\(lat)") 
    let geoSearchLon = (lon == "" ? "-118.4179" : "&geoSearchWordLon=\(lon)") 
    let geoSearchRadius = (radius == "" ? "25" : "&geoSearchWordRadius=\(radius)") 

    let twitterURLRequest: String = "https://quiet-cove-5048.herokuapp.com/tw?\(geoSearchWord)\(geoSearchLat)\(geoSearchLon)\(geoSearchRadius)" 
    alamoRequest(twitterURLRequest) 
} 

ama ben hâlâ onunla mutlu değil.

cevap

0

Kullanım if-let:

@IBAction func search(sender: AnyObject) { 

    if let searchWord = searchQ.text, 
      r = searchRadius.text, 
      latitude = searchLat.text, 
      longitude = searchLon.text { 
     customSearch(searchWord, radius: r, lat: latitude, lon: longitude) 
    } 
} 

customSearch yöntemi yalnızca bir Dört adet lets'un, nil olmadığı bulunmuştur. Kodunuzun çökmeden güvenli bir şekilde yürütülmesi garanti edilir. do customSearch senin yönteme değişiklikler varsayılan parametrelerini belirlemek için nedir Üstelik

, yöntemi çağrılırken ederken bazı parametreler tüm de geçmedi EĞER. Eğer yerine nil geçerseniz işe yaramaz. Örneğin, customSearch() numaralı telefonu arayarak, herhangi bir parametre değerini geçmeden, 4 paramın tümü varsayılan değerleri alır ve böyle devam eder. Eğer parametrelerinde nil değerlerine sahip tamam ise şöyle

, sizin customSearch yöntem uygulanmasını değiştirin: parametre türünün yanındaki ? onları nil olmasını sağlar

func customSearch(q:String?, radius:String?, lat:String?, lon:String?) { 
    let geoSearchWord = (q == nil ? "" : "geoSearchWord=\(q)") 
    let geoSearchLat = (lat == nil ? "33.960" : "&geoSearchWordLat=\(lat)") 
    let geoSearchLon = (lon == nil ? "-118.4179" : "&geoSearchWordLon=\(lon)") 
    let geoSearchRadius = (radius == nil ? "25" : "&geoSearchWordRadius=\(radius)") 

    let twitterURLRequest: String = "https://quiet-cove-5048.herokuapp.com/tw?\(geoSearchWord)\(geoSearchLat)\(geoSearchLon)\(geoSearchRadius)" 
    alamoRequest(twitterURLRequest) 
} 

.Nihayet

, yöntemi çağrılırken ederken, emin olun bu yüzden gibi params herhangi ambalajından fore yoktur:

@IBAction func search(sender: AnyObject) { 
     customSearch(searchQ.text, radius: searchRadius.text, lat: searchLat.text, lon: searchLon.text) 
    } 
+0

Eh şey, herhangi bir veya tüm değerler sıfır olmak iyiyim. Bu yüzden varsayılan parametrelerim var. Anlamı, eğer sıfırdan geçerseniz, o zaman varsayılana gidecektir, aksi halde sağlanan değeri kullanacaktır. Ve bu dörtün tamamının sıfır olmadığı, herhangi bir kombinasyonda bir, iki, üç veya dörtün de sıfır olamayacağı bir durum değildir. – Waffles

+0

Düzenlendi. Şimdi, paramların herhangi biri veya tamamı sıfır olabilir. Ayrıca, yöntemleri çağırırken, parazitleri, metin alanlarının '.text 'özelliklerinden herhangi birini zorla kaldırmayan isteğe bağlı olarak bırakın. –

+0

Evet, benim yaptığım şey buydu, ama teşekkürler, size cevabı verecektir! – Waffles

0

Maalesef, fonksiyonlardaki varsayılan parametrelerin tümü veya hiç olmadığı görülmektedir. Etkili olarak, iki işlev imzanız var: varsayılanı kullanan ve diğeri olmayan.

customSearch denetlediğiniz bir işlevse, isteğe bağlı parametreleri kabul etmek için yeniden yazabilir ve işlev uygulamasında varsayılanları atayabilirsiniz.

1

Uygulamanızın customSearch işlevi içinde varsayılan parametreleri kullanması mümkün mü?

bu

@IBAction func search(sender: AnyObject) { 
    let searchWord = searchQ.text ?? "defaultWord" 
    let r = searchRadius.text ?? "defaultR" 
    let latitude = searchLat.text ?? "defaultLatitude" 
    let longitude = searchLon.text ?? "defaultLongitude" 
    customSearch(searchWord, radius: r, lat: latitude, lon: longitude) 
} 

// where customSearch function might look like this 
func customSearch(word: String, radius: String, lat: String, lon: String) { 

    /*...*/ 
} 

gibi bir şey deneyebilirsiniz böylece başka bir yolu da customSearch işlevi içinde bu mantığı taşımak olurdu:

@IBAction func search(sender: AnyObject) { 
    let searchWord = searchQ.text 
    let r = searchRadius.text 
    let latitude = searchLat.text 
    let longitude = searchLon.text 
    customSearch(searchWord, radius: r, lat: latitude, lon: longitude) 
} 

// where customSearch function might look like this 
func customSearch(word: String?, radius: String?, lat: String?, lon: String?) { 

    let searchWord = word ?? "defaultWord" 
    let r = radius ?? "defaultR" 
    let latitude = lat ?? "defaultLatitude" 
    let longitude = lon ?? "defaultLongitude" 
} 
İlgili konular