[英]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.