如何在swift 4中获取URL的顶级域名?

she*_*ath 6 xcode nsurl ios swift

我的要求是通过过滤掉它的子域名来获取 URL 的域名。

我可以使用以下代码获取主机名

if let url = URL(string: "https://blog.abc.in/")  {
    if let hostName = url.host  {
         print("host name = \(hostName)") // output is: blog.mobilock.in
    }
 }
Run Code Online (Sandbox Code Playgroud)

所以在 URL博客中是一个子域,而abc是一个域名,我希望通过排除其子域部分来只知道/打印abc

在android中,有一个返回域名的类InternetDomainName,我正在寻找iOS的类似解决方案

我尝试了几个答案,但它不是重复的任何一个或其中一些不起作用,或者这是一种解决方法。

获取 URL 字符串的域部分?

she*_*ath 6

所以最后我找到了解决这个问题的更好和标准的方法 -

Mozilla 志愿者维护公共后缀列表,您可以在那里找到相应语言的库列表。所以在列表中也存在Swift 库。在撰写此答案时,Swift 库没有通过 CocoPods 添加它的条件,因此您必须将下载的项目直接添加到您的项目中。假设Swift 库已添加到您的项目中,用于获取 TLD 名称的代码。

import DomainParser

static func getTLD(withSiteURL:String) -> String? {
        do{
            let domainParse = try DomainParser()
            if let publicSuffixName = domainParse.parse(host: withSiteURL)?.publicSuffix {
                if let domainName = domainParse.parse(host: withSiteURL)?.domain {

                    let tldName = domainName.replacingOccurrences(of: publicSuffixName, with: "").replacingOccurrences(of: ".", with: "")
                    print("top level name = \(tldName)")
                    return tldName
                }
            }
        }catch{
        }
        return nil
    }
Run Code Online (Sandbox Code Playgroud)

添加域解析器库作为您项目的子项目,因为该库的 pod 尚不可用