[swift-evolution] SE-0105: Removing Where Clauses from For-In Loops

Sean Heber sean at fifthace.com
Fri Jun 24 10:06:52 CDT 2016


I’ll share some of mine from a single game project. Note this hasn’t been converted to Swift 3 and this is not all of them - just a varied sampling:


for location in random.sample(map, density: 0.007) where map.allowsGrassAt(location) && !map.hasGrassAt(location) {
}

for location in type.designatedLocations where location.z == Global.cameraZ && !locations.contains(location) {
}

for location in region where location.z == mouseLocation.z {
}

for location in path where location.z == Global.cameraZ {
}

for below in location.below.cardinals where contains(below) && hasSurfaceAt(below) {
}

for neighbor in location.cardinals where contains(neighbor) && isRampAt(neighbor) && !isFloorAt(neighbor.above) {
}

for neighbor in cardinals where contains(neighbor) && !isSolidAt(neighbor) {
}

for console in consoles.reverse() where console.hitTest(vector) {
}



And these 2 made good use, IMO, of “if-where” but I think that’s no longer in Swift 3? :/


if let there = debugClickedSurfaceAt, here = mouseSurface where Global.debugPathTest {
}

if let here = mouseAt where Global.debugWalkNeighbors {
}


l8r
Sean




> On Jun 24, 2016, at 8:24 AM, Erica Sadun via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Thank you for collecting and sharing these. 
> 
> I suspect both of us look at these and say "Ah yes, this supports exactly what I've been saying".
> 
> -- E
> 
>> On Jun 23, 2016, at 11:59 PM, William Shipley <wjs at mac.com> wrote:
>> 
>> Here are some of my real-world examples:
>> 
>>         for modelUUIDAndInterfaceElement in modelUUIDsToInterfaceElements where !usedInterfaceElements.contains(modelUUIDAndInterfaceElement.1) {
>>>>         }
>> 
>>         for anchor in wall.anchors where boundsRect.contains(anchor.origin) {
>>>>         }
>> 
>>         for otherWall: Wall in self where otherWall != wall && !removedWalls.contains(otherWall) {
>>>>         }
>> 
>>         for wall in self as Set<Wall> {
>>             for otherWall in self as Set<Wall> where otherWall != wall {
>>>>             }
>>         }
>> 
>>         for wall in self as Set<Wall> where !checkedWalls.contains(wall) {
>>>>         } 
>> 
>> (x2 on that one)
>> 
>>         for otherPieceOfFurnitureNode in localFurnitureModelUUIDsToInterfaceElements!.values where otherPieceOfFurnitureNode !== pieceOfFurnitureNode {
>>>>         }
>> 
>>         for lineSegmentObject in wallRelatedLineSegments where remainingLineSegments.contains(lineSegmentObject) {
>>>>         }
>> 
>>         for colinearLineSegmentObject in remainingLineSegments where colinearLineSegmentObject.angle.isEssentially(infiniteLineAngle: lineSegmentObject.angle) {
>>>>         }
>> 
>> 
>> I think this is basically as many as are found on all of github?
>> 
>> -W
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list