Sign in

A passionate  iOS developer. Write to record my learning and share the knowledge.

Enrich your chart and emphasise the important information

In my recent article [Swift] Set Up a Basic Bar Chart Using iOS-Charts, I demonstrate how to set up a basic bar chart using a widely-used third-party library iOS-Charts.

Today we are going to take it to the next level. By adding some simple pieces of code, we can make the user catch the important information on your chart at once.

Since this article focuses on how to add a custom marker to the iOS Chart, I assume you already the prerequisite knowledge of building an iOS Chart and creating a custom view from xib. I will skip chart view…

iOS-Charts is a very flexible, easy-to-use third-party library, allowing you to highly customise your chart.

I recently use iOS-Charts at work. It’s a very flexible, easy-to-use third-party library, allowing you to highly customise your chart.

This library is around 95% similar to its Android counterpart, making developing apps for both platforms much easier.

Here I use some high-income countries' birth rate data to demonstrate how to set up a basic bar chart using iOS-Charts.

Finally, I finished this eight-week course. As an iOS developer, naturally I chose iOS track.

Assignment 1: Pokedex


Add searching function.

Add a button to keep track of which Pokémon have been caught and save the state in UserDefaults.

Create structs with types that match the keys and types returned by the API. Parse the JSON data and display Pokemons’ image and description

Some structs are added to help parse the JSON data. I have done some practices of this skill in Music App, so it didn’t take me much time to finish the parts of displaying pokemon image and description.


Key Points

  • Basic commands and operations
  • SQL data types
  • Making SQL queries in Python programmes
  • Multiple tables
  • SQL injection attack

Assignment: Houses


Write a programme that imports data from a CSV spreadsheet. For each student in the CSV file, insert the student into the students table in the students.db database.

While the CSV file provided to you has just a name column, the database has separate columns for first, middle, and last names. You’ll thus want to first parse each name and separate it into first, middle, and last names. …

1. Create Date Object with Specific Dates and/or Times

To create a Date object with a specific date, let’s say October 10 2020, we can create from DateComponent or String.

Create From DateComponent

var dateComps = DateComponents()
dateComps.calendar = Calendar.init(identifier: .gregorian) = 10
dateComps.month = 10
dateComps.year = 2020
let date =
//Oct 10, 2020 at 12:00 AM

The time will automatically set to 12:00 AM if not specified.

Create From String

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM/dd/yyyy"
let dateStr = "Jan/20/2020"
let date = dateStr)
// Jan 20, 2020 at 12:00 AM

2. Parse Dates

This part demonstrates how to parse string-based and integer-based values we get back from API to Date objects.

ISO 8601

Key Points

  • Python basics
  • Demonstration of converting previous assignments from C to Python
  • Files
  • Features that C does not have

Assignment: DNA

I broke down this programme into a few small functions, dealing with the DNA database, the input DNA sequences, and the computation of DNA results respectively.


At the beginning of this programme, it checks the number of command-line arguments first. If the user does not pass 3 arguments on the command line, this programme exits.

If 3 command-line arguments are passed, this programme reads the database by calling function read_db(). The second command-line argument, supposed to be the file name of a…

1. Date

Date is a specific point in time, independent of any calendar or time zone.

To create a date object initialised to the current date and time, simply write like this:

let date = Date()

If you run it on Playground, the Date object shown on live view might look a bit different from what it is printed out. That’s because the Date object shown on live view shows the current date and time of your system. When you print it out, it shows the date information in ISO 8601 format UTC time. …

Key Points

  • Resizing array
  • Data structure
  • Linked list
  • Tree
  • Hash table
  • Trie
  • Queue
  • Stack
  • Dictionary

Assignment: Speller


Implement functions that spell-check a file after loading a dictionary of words from disk into memory. Use a hash table to keep track of the words in dictionary

load() Function

  1. Open the dictionary file
  2. Read words from the dictionary file one at the time
  3. Create a new node for each word
  4. Hash word to obtain the hash value (index of hash table)
  5. Check if the location of the hash table has a node yet. If yes, insert the new node at the front of the linked list…

One day I just wanted to make a collection view able to be infinitely scrolled both forward and backward, so I started to think about how to make it. Then I was inspired by those infinite rotating ads commonly seen on e-commerce apps.

Key Points

  • Hexadecimal
  • Pointer: *operator, &operator
  • Dynamic memory allocation: malloc(), free()
  • string: null terminating character \0
  • Compare & copy string
  • valgrind: check memory leak
  • swap function
  • Memory layout: heap, stack
  • Call stacks
  • File pointer: open, read, write, and close
  • JPEG & BMP

Assignment 1: Filter (less)


Complete functions grayscale, sepia, reflect, and blur that apply filters to BMPs.

Functions grayscale and sepia simply iterate through each pixel and recalculate its RBG values. Function reflect swaps the RGB values of each pixel with the pixel on the mirror side of it. These 3 functions are quite easy, so I don’t show them here.

Function blur is…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store