Dapatkan bagian dari NSURL di objektif-c

114

Saya memiliki NSString dengan nilai

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

Bagaimana saya bisa mendapatkan semuanya sebelum level ke-3?

http://digg.com/news/
Melina
sumber

Jawaban:

435

Ini bukan tingkat ketiga, ingatlah. Sebuah URL dibagi seperti itu:

  • protokol atau skema (di sini, http)
  • yang ://pembatas
  • nama pengguna dan kata sandi (di sini tidak ada, tapi bisa jadi username:password@hostname)
  • nama host (di sini, digg.com)
  • port (misalnya :80setelah nama domain)
  • jalan (di sini, /news/business/24hr)
  • string parameter (apa pun yang mengikuti titik koma)
  • string kueri (itu akan menjadi jika Anda memiliki parameter GET seperti ?foo=bar&baz=frob)
  • fragmen (itu akan terjadi jika Anda memiliki jangkar di tautan, seperti #foobar).

URL "berfitur lengkap" akan terlihat seperti ini:

http://foobar:[email protected]:8080/some/path/file.html;params-here?foo=bar#baz

NSURLmemiliki berbagai macam pengakses. Anda dapat memeriksanya di dokumentasi untuk NSURLkelas, bagian Mengakses Bagian dari URL . Untuk referensi cepat:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (semuanya dari // sampai akhir URL)
  • -[NSURL user] = foobar
  • -[NSURL password] = nicate
  • -[NSURL host] = example.com
  • -[NSURL port] = 8080
  • -[NSURL path] = /some/path/file.html
  • -[NSURL pathComponents] = @ ["/", "some", "path", "file.html"] (perhatikan bahwa inisial / adalah bagian darinya)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = params-here
  • -[NSURL query] = foo = bar
  • -[NSURL fragment] = baz

Namun, yang Anda inginkan adalah sesuatu seperti itu:

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

Untuk URL contoh Anda, yang tampaknya Anda inginkan adalah protokol, host, dan komponen jalur pertama. (Elemen di indeks 0 dalam larik yang dikembalikan oleh -[NSString pathComponents]hanyalah "/", jadi Anda akan menginginkan elemen di indeks 1. Garis miring lainnya dibuang.)

zneak
sumber
9
bagi siapa pun yang membaca ini: Anda perlu mendapatkan [url.pathComponents objectAtIndex:1]alih-alih indeks 0, karena garis miring sebenarnya adalah elemen dari array, menyebabkan kode dalam jawaban ini menjadi keluaranhttp://digg.com//
Dima
@Dima, tangkapan bagus. Namun, hanya garis miring pertama yang dianggap sebagai komponen jalur, yang lainnya akan dibuang. Saya tidak yakin mengapa.
zneak
tangkapan yang bagus di pihak Anda juga! Saya bahkan tidak memeriksanya hanya dengan satu.
Dima
Apakah kita kehilangan nama file dari daftar poin peluru? Dalam contoh ini, file.htmltidak terdaftar dalam poin-poin - saya melihat kita melompat dari jalur ke string kueri ...
Brett
2
digg.com? berapa umur posting ini ;-)
Darren tidak digunakan lagi
7

Menggunakan Playground, bahasa cepat, saya dapat ini! Playground menyediakan cara interaktif untuk melihat ini beraksi. Saya harap Anda dapat menikmati melakukan hal yang sama, cara yang menyenangkan untuk mempelajari NSURL, topik penting di iOS.

Kumar Utsav
sumber