: von der Art Swift Range
zu prägnanter machen das telefonieren Es ist nicht klar, ob das OP einfach klemmen will (der Titel scheint das zu sagen) oder von einem Grenzbereich zum anderen interpolieren will. Der Titel lässt mich einen denken, aber die doppelten Max/Min-Werte lassen mich denken, dass sie nach einer Interpolation sind. Ich antwortete dem ehemaligen. David Berry hat eine gute Antwort für Letzteres.
Was Sie können wollen ist Min/Max-Funktionen. Swift hat diese. Um „klemmen“ einen Wert zwischen einem niedrigen und hohen Wert, kombinieren Sie in der Regel die beiden:
var bottom = 13
var top = 42
var tooLow = 7
var clamped = min(top, max(bottom, tooLow)) -> 13
var justRight = 23
clamped = min(top, max(bottom, justRight)) --> 23
var tooHigh = 99
clamped = min(top, max(bottom, tooHigh)) --> 42
Dies ist in der Regel der Weg die meisten Menschen gehen, und ist wahrscheinlich gut genug für die meisten. Ich persönlich hasse es, das immer wieder zu schreiben, und ich habe es satt, darüber nachdenken zu müssen, auf welcher Seite ich mich in das Max und das Min einspeisen soll. Und Ich mag es nicht, dass es verwendet, was wie eine freie Funktion sieht, ich bin eine objektorientierte Nachricht Art von Kerl zu senden, so dass ich wie folgt vorgehen:
precedencegroup MinMaxPrecedence {
associativity: left
higherThan: NilCoalescingPrecedence, AdditionPrecedence, MultiplicationPrecedence
}
infix operator <> : MinMaxPrecedence
func <><T:Comparable>(a:T, b:T) -> T {
return a < b ? a : b
}
infix operator >< : MinMaxPrecedence
func ><<T:Comparable>(a:T, b:T) -> T {
return a < b ? b : a
}
Im Grunde ist dies definiert zwei neue Operatoren (<>
und ><
), die zwischen jedem Typ verwendet werden kann, der Comparable
annimmt. Sie sind für mich leicht zu merken, derjenige, der sich kleiner einfügt, will den kleineren Wert, und derjenige, der größer öffnet, gibt den größeren Wert zurück.Was schön ist, dass man sie dann in einfacher Ausdrücke setzen können:
var bottom = 13
var top = 42
var tooLow = 7
var justRight = 23
var tooHigh = 99
bottom >< tooLow <> top --> 13
bottom >< justRight <> top --> 23
bottom >< tooHigh <> top --> 42
http://stackoverflow.com/questions/24132399/how-does-one-make-random-number-between-range-for-arc4random -uniform – Sahil
Was bedeutet "eine Zahl zwischen zwei Zahlen halten"? Möchten Sie eine Zufallszahl generieren? –
Ihre Frage ist unklar, aber die Dokumentation zu 'map' finden Sie [hier] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html). – Caleb