开发者

Get the domain part of an URL string?

开发者 https://www.devze.com 2023-03-09 10:47 出处:网络
I have an NSString with an URL, in this way: http://someurl.com/something How would I get someurl.开发者_运维技巧com only?

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 :)


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


Use

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


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: ".")
    }
}


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
    }
    
}

}


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


Swift 5.5

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


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

0

精彩评论

暂无评论...
验证码 换一张
取 消