簡體   English   中英

將rangeOfString從Objective-c轉換為Swift

[英]Translate rangeOfString from Objective-c To Swift

我正在嘗試幾個小時來翻譯此簡短代碼。 目標C:

NSString *urlStr = [request.URL absoluteString];
NSArray *urlParts = [urlStr componentsSeparatedByString:[NSString stringWithFormat:@"%@/", kREDIRECTURI]];

if (urlParts.count > 1)
{
    urlStr = urlParts[1];
    NSRange token = [urlStr rangeOfString:@"#access_token="];

    if (token.location != NSNotFound)
    {
        vc.access_token = [urlStr substringFromIndex:NSMaxRange(token)];
    }
}

我試過的

斯威夫特:

var urlParts : NSArray = urlStr!.componentsSeparatedByString("\(kREDIRECTURI)")
if urlParts.count > 1
{
    urlStr = urlParts[1] as? String
    var token  = urlStr!.rangeOfString("#access_token=", options: NSStringCompareOptions.allZeros) as NSRange!

    if token != nil
    {
         var vc = ViewController()
         urlStr!.substringFromIndex(NSMaxRange(token))!
    }
}

任何想法?

我將假設access_token查詢參數位於末尾,並且代碼遵循類似“ http:\\ ...#access_token =”的字符串,URL以結尾的代碼結尾。 這是一個簡單的方法,可以從網址中提取代碼,

func getTokenFromUrl(url: String) -> String? {

    let range1 = url.rangeOfString("#access_token")

    guard let range = range1 else { return nil }

    let startIndex = range.endIndex.successor()
    let rangeOfToken = url.endIndex

    let rangeOfString = startIndex ..< rangeOfToken

   return  url.substringWithRange(rangeOfString)
}

let url1 = "http://stackoverflow.com/questions/31010975/translate-rangeofstring-from-objective-c-to-swift?#access_token=873jasf82jmsa8sd"

let url2 = "http://stackoverflow.com/questions/31010975/translate-rangeofstring-from-objective-c-to-swift"

getTokenFromUrl(url1) // returns 873jasf82jmsa8sd
getTokenFromUrl(url2) // returns nil

對於早期版本的Swift,您可以使用if let patter來解開可選選項,

func getTokenFromUrl(url: String) -> String? {

    let range1 = url.rangeOfString("#access_token")

    if let range = range1 {

        let startIndex = range.endIndex.successor()
        let rangeOfToken = url.endIndex

        let rangeOfString = startIndex ..< rangeOfToken

       return  url.substringWithRange(rangeOfString)
    }
    return nil
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM