将 rangeOfString 从 Objective-c 翻译成 Swift
Translate rangeOfString from Objective-c To Swift
我花了几个小时来翻译这段简短的代码。
Objective 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)];
}
}
我尝试过的:
Swift :
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 以代码在末尾结束。这是一个简单的方法,可以从 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 = ""
let url2 = ""
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
}
我花了几个小时来翻译这段简短的代码。 Objective 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)];
}
}
我尝试过的:
Swift :
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 以代码在末尾结束。这是一个简单的方法,可以从 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 = ""
let url2 = ""
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
}