pmerino
pmerino

Reputation: 6130

Get the domain part of an URL string?

I have an NSString with an URL, in this way:

http://someurl.com/something

How would I get someurl.com only? I've already tried substringToIndex with no luck :(

Thanks in advance :)

Upvotes: 34

Views: 41346

Answers (7)

Mamad Farrahi
Mamad Farrahi

Reputation: 494

Swift 5.5

extension String {
    var onlyHost: String? {
        let url = URL(string: self)
        return url?.host
    }
}

Upvotes: 2

OneUpWallStreet
OneUpWallStreet

Reputation: 94

Swift 5

Extension to string, that gives you the domain name, while also removing "www."

extension String {
func StripURLMakeAttractive(_ url: String) -> String {
        
    let url = URL(string: url)
    guard let domain = url?.host else {return "error"}
    var modifiedDomain: String = ""
    
    var checkWWW: String = ""
    let checkIndexes = [0,1,2,3]

    for (index,char) in domain.enumerated() {
        if checkIndexes.contains(index){
            checkWWW.append(char)
        }
        if index > 3 && checkWWW.lowercased() == "www."  {
            modifiedDomain.append(char)
        }
    }
    
    if checkWWW.lowercased() == "www."{
        return modifiedDomain
    }
    else {
        return domain
    }
    
}

}

Upvotes: 2

Alexey Lysenko
Alexey Lysenko

Reputation: 2006

Swift 4.2

I wrote extension for URL to take SLD. Seems, there is n

extension URL {
    /// second-level domain [SLD]
    ///
    /// i.e. `msk.ru, spb.ru`
    var SLD: String? {
        return host?.components(separatedBy: ".").suffix(2).joined(separator: ".")
    }
}

Upvotes: 7

Naishta
Naishta

Reputation: 12383

Swift 4

And if you are using Custom url schemes say for deeplinking, for eg:

myapp:homescreen

(and don't have the "forward slashes with host name" (//www.bbc)), one solution that worked for me to extract "homescreen" is by using the index method below and then pattern matching to scrape everything after ":"

let index = absoluteString.index(absoluteString.startIndex, offsetBy: 5)
String(absoluteString[index...])

url.host or absoluteURL.host is nil in this scenario

Upvotes: 0

Stephen Darlington
Stephen Darlington

Reputation: 52565

Objective-C

NSString* urlString = @"http://someurl.com/something";
NSURL* url = [NSURL URLWithString:urlString];
NSString* domain = [url host];

Swift 2

var urlString = "http://someurl.com/something"
var url = NSURL(string: urlString)
var domain = url?.host

Swift 3+

var urlString = "http://someurl.com/something"
var url = URL(string: urlString)
var domain = url?.host

Upvotes: 102

Brian Lyttle
Brian Lyttle

Reputation: 14579

You should look at the host() method of the NSURL class.

Upvotes: 1

Deepak Danduprolu
Deepak Danduprolu

Reputation: 44633

Use

[[NSURL URLWithString:@"http://someurl.com/something"] host]

Upvotes: 11

Related Questions