将Python函数转换为Objective-C?

将Python函数转换为Objective-C?,python,ios,objective-c,Python,Ios,Objective C,我正在尝试解密YouTube签名参数。我发现了一些东西,但我无法理解到目前为止我发现了什么 下面是Python函数: if len(s) == 92: return s[25] + s[3:25] + s[0] + s[26:42] + s[79] + s[43:79] + s[91] + s[80:83] elif len(s) == 90: return s[25] + s[3:25] + s[2] + s[26:40] + s[77] + s[41:77] + s[89]

我正在尝试解密YouTube签名参数。我发现了一些东西,但我无法理解到目前为止我发现了什么

下面是Python函数:

if len(s) == 92:
    return s[25] + s[3:25] + s[0] + s[26:42] + s[79] + s[43:79] + s[91] + s[80:83]
elif len(s) == 90:
    return s[25] + s[3:25] + s[2] + s[26:40] + s[77] + s[41:77] + s[89] + s[78:81]
elif len(s) == 88:
    return s[48] + s[81:67:-1] + s[82] + s[66:62:-1] + s[85] + s[61:48:-1] + s[67] + s[47:12:-1] + s[3] + s[11:3:-1] + s[2] + s[12]
elif len(s) == 87:
    return s[4:23] + s[86] + s[24:85]
elif len(s) == 86:
    return s[2:63] + s[82] + s[64:82] + s[63]
elif len(s) == 85:
    return s[2:8] + s[0] + s[9:21] + s[65] + s[22:65] + s[84] + s[66:82] + s[21]
elif len(s) == 84:
    return s[83:36:-1] + s[2] + s[35:26:-1] + s[3] + s[25:3:-1] + s[26]
elif len(s) == 83:
    return s[6] + s[3:6] + s[33] + s[7:24] + s[0] + s[25:33] + s[53] + s[34:53] + s[24] + s[54:]
elif len(s) == 82:
    return s[36] + s[79:67:-1] + s[81] + s[66:40:-1] + s[33] + s[39:36:-1] + s[40] + s[35] + s[0] + s[67] + s[32:0:-1] + s[34]
elif len(s) == 81:
    return s[6] + s[3:6] + s[33] + s[7:24] + s[0] + s[25:33] + s[2] + s[34:53] + s[24] + s[54:81]

如何将上述Python函数转换为Objective-C函数?

最优雅的方法是将if/elif改为switch/case。可能是这样的:

 switch (s.length)
 {
     case 92:
          //something something
          break;
     case 90:
          //something something
          break;
     default:
          break;
 }

每个“回报”都必须单独管理。例如,Python数组切片意味着在字符串s[3:6]中,子字符串从第3个字母开始,到第4个字母结束。在objective-C中,您可以使用substringFromIndex:

这应该很容易,但我不会完全完成您的工作,而是将在Python中解释括号是如何工作的。

如果我们假设
s
字符串
s[x]
返回x处的字符

s = 'some long string'
print s[3]
打印出:

e
因此,要在Objective-C中写下这一点:

NSString* s = @"some long string";
NSLog (@"%@", [s substringWithRange:NSMakeRange(3, 1)]);
在下一次尝试中,我们有
s[x:y]

print s[3:7]
这将打印出:

e lo
e 
为了在Objective-C中编写此代码,我们再次使用
substringWithRange
方法

NSLog (@"%@", [s substringWithRange:NSMakeRange(3, 4)]);
只是我们必须小心地进行一些计算,因为NSMakeRange将长度作为参数,而不是第二个索引

对于最后一个,我们有:
s[x:y:z]

print s[3:7:2]
这将打印出:

e lo
e 
它只需要3中的两个字符,因此e和空格

+运算符只是连接字符串。

阅读Python中字符串的使用方法:

并阅读上的
NSString
文档


当然,您需要将这些语句包装在switch或IF-ELSEIF子句中,以使函数的行为与Python中的相同。这里您所拥有的只是基本的字符串操作,您应该能够自己进行操作,而不是让别人代替您进行操作。

谢谢您的解释,您的解释对我非常有帮助。再次感谢