2017-11-28 2 views
-2

Ich bin nicht ganz sicher, wasWas bedeutet [urlString componentsSeperatedByString: @ "?"] [0]? gemein im Swift?

NSString * fileName = [self cachedFileNameForKey:[urlString componentsSeparatedByString:@"?"][0]]; 

Mittel aus diesem Code. Ich schreibe hauptsächlich in Swift, daher ist diese Notation etwas verwirrend für mich. Was bedeutet die doppelte [] -Notation? 3D-Array?

+ (AVPlayerItem *)localDownloadedVideoFromUrl:(NSURL *)url { 
     NSString * urlString = url.absoluteString; 
     NSString * fileName = [self cachedFileNameForKey:[urlString componentsSeparatedByString:@"?"][0]]; 
     TWRDownloadManager * manager = [TWRDownloadManager sharedManager]; 
     if ([manager fileExistsWithName:fileName]) { 
      AVPlayerItem * item = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:[manager localPathForFile:fileName]]]; 
      return item; 
     } 
     return [NSNull null]; 
    } 
+0

Es sieht so aus, als ob [0] das Objekt aus dem 0. Index auswählt. –

+0

Beachten Sie, dass Sie den Dateinamen von der suggestFilename-Eigenschaft der URLResponse vom Server abrufen sollten –

Antwort

-1

Ahh so Fehler von mir ist, dass ich nicht sehen, was die Methode -cacheFileNameForKey: tat.

+ (nullable NSString *)cachedFileNameForKey:(nullable NSString *)key { 
    const char *str = key.UTF8String; 
    if (str == NULL) { 
     str = ""; 
    } 
     unsigned char r[CC_MD5_DIGEST_LENGTH]; 
     CC_MD5(str, (CC_LONG)strlen(str), r); 
     NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@", 
         r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], 
         r[11], r[12], r[13], r[14], r[15], [key.pathExtension isEqualToString:@""] ? @"" : [NSString stringWithFormat:@".%@", key.pathExtension]]; 

     return filename; 
} 

Ich denke, es ist für eine Funktion verwendet, um einen Dateinamen für eine temporäre Filmdatei zu generieren.

1

In Swift

var urlString: String = "Know someone who can answer? Share a link to this" // Example string or url.absoluteString 

let fileName = urlString.components(separatedBy: "?") 
print(fileName) 

let string1 = fileName[0] 
let string2 = fileName[1] 

Hope für Sie hilfreich

2

[] in Objective-C ist nicht nur den Zugriff auf Arrays verwendet, sondern auch Methoden zu nennen. Überraschend, nicht wahr?

Im Allgemeinen

[xxx someMethod]; 

entspricht:

xxx.someMethod() 

in schnell.

Also hier:

[urlString componentsSeparatedByString:@"?"][0] 

bedeutet

urlString.components(separatedBy: "?")[0] // "[0]" can also be replaced by ".first", which is safer. 

Dieses wird dann an den cachedFileNameForKey als Parameter übergeben.