2016-05-08 10 views
0

Ich habe eine sehr einfache/einfache swift-App, mit einem eingebetteten WebView, der per URL auf ein Youtube-Video verweist. Siehe den gesamten Code unten. Ich möchte 10 weitere Youtube-URLs hinzufügen und sie zufällig im WebView über eine Schaltfläche namens "shuffleButton" auffüllen. Wie kann ich diesen Knopf ganz einfach benutzen, um ein Video zu laden und dann zufällig durch sie zu mischen? Kann ich die Hauptliste der Video-URLs in demselben ViewController finden? Vielen Dank!Random Shuffle Liste der URLs - Swift

// ViewController.swift

@IBOutlet var videoView: UIWebView! 

@IBOutlet var shuffleButton: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

let youtubeURL = "https://www.youtube.com/embed/Rg6GLVUnnpM" 

    videoView.allowsInlineMediaPlayback = true 

    videoView.loadHTMLString("<iframe width=\"\(videoView.frame.width)\" height=\"\(videoView.frame.height)\" src=\"\(youtubeURL)?&playsinline=1\" frameborder=\"0\" allowfullscreen></iframe>", baseURL: nil) 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

Antwort

1

Nicht sicher, ob dies eine sehr effiziente Lösung wäre, aber man konnte nur eine einfache Lookup erstellen und rufen Sie die Funktion arc4random_uniform(_:) eine Zufallszahl zu generieren:

struct VideoLinks { 
    static func getLink(forNumber number: Int) -> String { 
     switch number { 
     case 1: return "http://www.example.com/one" 
     case 2: return "http://www.example.com/two" 
     case 3: return "http://www.example.com/three" 
     case 4: return "http://www.example.com/four" 
     case 5: return "http://www.example.com/five" 
     case 6: return "http://www.example.com/six" 
     case 7: return "http://www.example.com/seven" 
     case 8: return "http://www.example.com/eight" 
     case 9: return "http://www.example.com/nine" 
     case 10: return "http://www.example.com/ten" 
     default: return "http://www.example.com/one" 
     } 
    } 
} 

func shuffle() -> String { 
    let linkNumber = Int(arc4random_uniform(11)) 
    return VideoLinks.getLink(forNumber: linkNumber) 
} 

Oder wenn Sie eine noch einfachere Lösung möchten, erstellen Sie einfach ein Array der Links und rufen Sie einen zufälligen Index:

let videoLinks = [ 
    "http://www.example.com/1", 
    "http://www.example.com/2", 
    "http://www.example.com/3", 
    "http://www.example.com/4", 
    "http://www.example.com/5", 
    "http://www.example.com/6", 
    "http://www.example.com/7", 
    "http://www.example.com/8", 
    "http://www.example.com/9", 
    "http://www.example.com/10" 
] 

func shuffle() -> String { 
    let randomNumber = Int(arc4random_uniform(10)) 
    return videoLinks[randomNumber] 
} 
0

Kann ich die Hauptliste von Video-URLs in demselben ViewController finden?

Sicher!

lässt voraus So gehen und diese Liste von URLs in unserem View-Controller beinhalten: (. Das im View-Controller, wie direkt über viewDidLoad erklärt überall werden könnte)

let urls = ["URL1", "URL2", "URL3", "URL4"] // etc. 

Jetzt, Wir brauchen einen Weg, um eine zufällige URL zum Öffnen auszuwählen. Der logische Weg wäre, einfach einen zufälligen Array-Index zu erzeugen. This question diskutiert die Generierung von Zufallszahlen zwischen Bereichen, und this answer ist eine gute Möglichkeit, eine Swift-freundliche Art und Weise zu tun, es zu tun. (Wenn Sie der Erweiterungsroute folgen, muss die Erweiterung auf globaler Ebene außerhalb jeder Klasse oder eines anderen Objekts geschrieben werden.)

Wir nehmen also an, dass wir die randomInt Erweiterung, die oben im Antwortlink beschrieben wird, definiert haben wir könnten eine IBAction zu Ihren view-Controller hinzufügen, die ausgelöst werden

let randomI = Int.random(0..<urls.count) 

so würden, wenn die Taste gedrückt wird:, könnten wir einen zufälligen Index wie so erhalten.

@IBAction func shuffleURL() { 
    let randomI = Int.random(0..<urls.count) 
    videoView.loadHTMLString(urls[randomI], baseURL: nil) 
} 

Hinweis: Wenn Sie eine kleine Anzahl von Urls haben, dies in der gleichen URL zur Folge haben kann nacheinander geladen werden.