2015-06-23 64 views
0

我想了好幾個小時來翻譯這個短代碼。 目標C:將Objective-C中的rangeOfString轉換爲Swift

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

任何想法?

+0

什麼是不工作?一個小問題是你沒有在swift代碼中設置vc.access_token。 – Bijington

+0

@Bijington我剛剛刪除該行,因爲我知道如何翻譯其餘的哈哈,我只想顯示較少的代碼。我無法解決的行是:NSArray * urlParts = [urlStr componentsSeparatedByString:[NSString stringWithFormat:@「%@ /」,kREDIRECTURI]]; and –

+0

@Bijington vc.access_token = [urlStr substringFromIndex:NSMaxRange(token)]; –

回答

1

我將假設access_token查詢參數在末尾,代碼如下所示字符串'http:\ ...#access_token =',url以代碼結束。這裏有一個簡單的方法,將提取出的代碼的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 

對於斯威夫特的早期版本,你可以要是讓行話解開選購使用,

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

它快速2.0嗎?因爲我得到噸錯誤大聲笑 –

+0

這是迅速2.0的課程警衛在那裏。 – Sandeep

+0

你好,我仍然在1.2上,你有任何機會可以轉換它嗎? –