Tag Archives: Swift

RNG using Game Kit.

I noticed yesterday when I started getting back into this that the random number generator was throwing an error.

I decided to implement the shuffle distributor from Game Kit, as that will exhaust the entire array before repeating any items.  For example, say I have 100 recordings that I want to randomly play.  By using the built in “random()” in Swift, and passing it the number of items available, each time you call random that is exactly what you get, a random number, between 0 and 99.  So maybe 5 comes up first, then 34, then 11, then 5 again, etc. etc..

This is undesirable.  I have seen (with an array of maybe 50 items) the same number come up 3 or 4 times in a row.  That’s not good, nobody wants to hear the same song, or same joke, or same anything 3 or 4 times in a row.  Inversely, I have also seen a single item take forever to actually play.  So out of those 50 items, the one you wanted to hear might not actually play until the 75, or 100th iteration.  Because it is truly random it might be a long time before picking that 1 item.

This is why I decided to use the shuffled distributor (GKShuffledDistribution) from Game Kit.  This is genius.  This will also select a random item, from 0 to 99 (or whatever you have), yet it won’t select the same item again until all items are exhausted.  So once #34 comes up the system will not select 34 again until the rest of the items in the array have been used up.

The error I was getting was because the app only had a single item in the array, and the bounds were set to be from 0 to count of items – 1. Theoretically I would think “between 0 and 0” might return 0, it doesn’t seem to work out that way, or I’m just interpreting the information incorrectly.  Once I have a few items in the array, it works fine.  My intent is to have a pre-loaded number of items in the array when the app is installed so the error should never pop up, but I will be keeping my eye on it, as well as testing to make sure it does indeed cycle through all possibilities before replaying anything.

Next, to finish the “launch” screen and make that presentable.  This should only show for a second or two while the app loads, but should be something decent looking that shows what the app does or is about.

Until next time.

UILabel and text.

In an upcoming app, I put a couple UILabels on, and populate the text from a database.  I then rounded the corners to make it look nicer, and was able to get the labels to auto-size so they adjust according to how much text is in there.

However, even though rounded corners look nice, it makes the edges of the text cut off.

I spent quite some time online looking for a way to, say, expand the label text area by 20 points (kind of like pixels).  I found all kinds of ways to make an auto-sizing label in code, but I didn’t need that since I had already done that through the Xcode interface itself.

I gave up, and instead just added 3 spaces before and after what I add from the database, and it worked out perfectly.

Gotta remember K.I.S.S..  Keep It Simple Stupid.

LAUNCH (again)

It has been some time since I posted to this site.  I’ve been posting (although infrequently) to Facebook, but think I’ll come back to this and do posts here again.   I can always push from here to Facebook.

I completely rewrote my “A Dose of Humor” app and it is not “Daily Dose of Humor”.  The rewrite served two purposes:

  • change from Objective-C to Swift.  Swift is the new language (relatively new anyway) from Apple for iPhone development.   Might as well keep up to date with the current language.
  • secondly, the database back-end that I had used originally was done in Parse.  Parse was a fantastic tool to quickly configure and use a cloud database.  Parse was purchased by Facebook, and not too long after it was purchased it was announced that it would close down.

So, with the shutting down of Parse I had to find another cloud database back-end, and I chose to write this in CloudKit, which is Apple’s native cloud database backend.

So here we are, my new app has been released into the wild, check it in iTunes on the App Store.

View on App Store