Object-c'de NSURL'nin parçalarını alın


114

Değerine sahip bir NSString var

http://digg.com/news/business/24hr

3. seviyeden önce her şeyi nasıl alabilirim?

http://digg.com/news/

Yanıtlar:


435

Unutmayın, bu tam olarak üçüncü seviye değil. Bir URL şu şekilde bölünür:

  • protokol veya şema (burada, http)
  • ://sınırlayıcı
  • kullanıcı adı ve şifre (burada hiç yok, ama olabilir username:password@hostname)
  • ana bilgisayar adı (burada, digg.com)
  • bağlantı noktası ( :80örneğin alan adından sonra olacaktır )
  • yol (burada, /news/business/24hr)
  • parametre dizesi (noktalı virgülden sonra gelen herhangi bir şey)
  • sorgu dizesi (GET gibi parametreleriniz olsaydı olurdu ?foo=bar&baz=frob)
  • parça (bu bağlantıda bir çapa olsaydı olurdu #foobar).

"Tam özellikli" bir URL şöyle görünür:

http://foobar:nicate@example.com:8080/some/path/file.html;params-here?foo=bar#baz

NSURLgeniş bir erişimci yelpazesine sahiptir. Bunları, NSURLsınıfın belgelerinde , URL'nin Parçalarına Erişim bölümünde kontrol edebilirsiniz . Hızlı başvuru için:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (//'den URL'nin sonuna kadar her şey)
  • -[NSURL user] = foobar
  • -[NSURL password] = nicate
  • -[NSURL host] = example.com
  • -[NSURL port] = 8080
  • -[NSURL path] = /some/path/file.html
  • -[NSURL pathComponents] = @ ["/", "bir", "yol", "dosya.html"] (baş harfinin / bunun bir parçası olduğuna dikkat edin)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = parametreler-burada
  • -[NSURL query] = foo = bar
  • -[NSURL fragment] = baz

Yine de isteyeceğiniz şey bunun gibi bir şey:

NSURL* url = [NSURL URLWithString:@"http://digg.com/news/business/24hr"];
NSString* reducedUrl = [NSString stringWithFormat:
    @"%@://%@/%@",
    url.scheme,
    url.host,
    url.pathComponents[1]];

Örnek URL'niz için, istediğiniz gibi görünen şey protokol, ana bilgisayar ve ilk yol bileşenidir. (Döndürülen dizideki 0 dizinindeki öğe -[NSString pathComponents]basitçe "/" dir, bu nedenle öğeyi dizin 1'de isteyeceksiniz. Diğer eğik çizgiler atılır.)


9
bunu okuyan herkes için: [url.pathComponents objectAtIndex:1]indeks yerine almanız gerekir 0, çünkü eğik çizgiler aslında dizinin öğeleridir ve bu yanıttaki kodun çıkmasına neden olurhttp://digg.com//
Dima

@Dima, iyi yakaladın. Ancak, yalnızca ilk eğik çizgi bir yol bileşeni olarak kabul edilir, diğerleri atılır. Yine de neden olduğundan emin değilim.
zneak

sizin açınızdan da iyi yakalayın! Sadece biriyle kontrol etmedim bile.
Dima

Madde işareti listesinde dosya adını kaçırıyor muyuz? Bu örnekte file.htmlmadde işaretlerinde listelenmemiştir
Yoldan

2
digg.com? bu gönderi kaç yaşında! ;-)
Darren,

7

Playground kullanarak, dil hızlı, bunu anladım! Playground, bunu eylem halinde görmenin etkileşimli bir yolunu sağlar. İOS'ta önemli bir konu olan NSURL'yi öğrenmenin eğlenceli bir yolu olan aynısını yapmaktan keyif alacağınızı umuyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.