31 過了30歲就看上升星座好嗎?datePicker、 IBSegueAction 跨頁面傳值、WebView

莫提年紀,但我真的越來越往上升星座靠攏了,但我還是有50%的水瓶座在我體內!

星座是個有趣的統計學,大家可以參考一下,不過其實大家都是獨一無二的存在。

學習內容:

1. datePicker

2. IBSegueAction

3. 跨頁面傳值

4. WebView

操作畫面:

一、首頁說明:

(一)設定首頁的datePicker這邊因為需要取到小時和分鐘,所以樣式選擇”Date and Time”。同時也設定outlet,取名birth。

(二)設定navigation controller,並從頁面連線中拉出”IBSegueAction”。將首頁的birth資料傳到下一頁的webViewController。

所以首頁的程式如下:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var birth: UIDatePicker!


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}

@IBSegueAction func calculate(_ coder: NSCoder) -> WebViewController? {
let controller = WebViewController(coder: coder)
controller?.birth = birth.date
return controller
}
}

二、webView頁面說明:

(一)起始時設定前面的birth型別為日期。

class WebViewController: UIViewController {

//設定webView的outlet
@IBOutlet weak var webView: WKWebView!

//設定生日型別為日期
var birth:Date!

(二)另外設定updateUI的程式,這個到時候要直接搬到viewDidLoad用。

//在viewDidLoad使用updateUI()函數
override func viewDidLoad() {
super.viewDidLoad()
updateUI()
// Do any additional setup after loading the view.
}

//設定updateUI程式
func updateUI() {...}

(三)updateUI()函數說明。

  1. 設定日期的類型與格式,也同時將前頁輸入的資料顯示在title上。
func updateUI() {
//設定日期類型
let dateFormatter = DateFormatter()
//設定日期格式
dateFormatter.dateFormat = "yyyy年MM月dd日HH時mm分"
//把前頁birth丟到函數顯示
let dayString = dateFormatter.string(from: birth)
//設定畫面title顯示文字串
title = "\(dayString)"

2. 接下來我們要將資料轉為數字,並進行上升星座的計算。

*上升星座公式:出生月參數(見表一查詢)+ 生日數字 × 4 + 出生時間 = 計算出的時間(見表二查詢)便得出上升星座。

出生月參數:

1月 06:40
2月 08:43
3月 10:33
4月 12:35
5月 14:33
6月 16:36
7月 18:34
8月 20:36
9月 22:38
10月 00:37
11月 02:39
12月 04:37

計算時間結果對應上升星座:

牧羊 18:00
金牛 19:29
雙子 21:11
巨蟹 23:13
獅子 01:29
處女 03:46
天平 06:00
天蠍 08:13
射手 10:30
摩羯 12:46
水瓶 14:48
雙魚 16:30

3. 那我們就來取值吧


//先各別取得月、日、時間
//取月
dateFormatter.dateFormat = "MM"
let Month = dateFormatter.string(from: birth)
let monthIndex = Int(Month) //將月字串轉為數字
//取日
dateFormatter.dateFormat = "dd"
let Day = dateFormatter.string(from: birth)
let dayIndex = Int(Day)//將日字串轉為數字
//取時
dateFormatter.dateFormat = "HH"
let Hour = dateFormatter.string(from: birth)
let hourIndex = Int(Hour)//將時字串轉為數字
//HH 是 24 小時制、hh 是 12 小時制
//取分
dateFormatter.dateFormat = "mm"
let Min = dateFormatter.string(from: birth)
let minIndex = Int(Min)//將分字串轉為數字

4. 這邊利用switch來區分12個月對應的數字~

因為是24小時進位,如果是下午出生(17時)數字會爆掉(超過24時),所以如果超過的話直接減24小時,換算成凌晨。

        //計算上升星座數字,這邊因為有12種不同月份起始值,所以用switch的架構比較清楚
switch monthIndex {
case 1 :
sum = ( 6 * 60 ) + 40 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}

case 2 :
sum = ( 8 * 60 ) + 43 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 3 :
sum = ( 10 * 60 ) + 33 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 4 :
sum = ( 12 * 60 ) + 35 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 5 :
sum = ( 14 * 60 ) + 33 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 6 :
sum = ( 16 * 60 ) + 36 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 7 :
sum = ( 18 * 60 ) + 34 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 8 :
sum = ( 20 * 60 ) + 36 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 9 :
sum = ( 22 * 60 ) + 38 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 10 :
sum = ( 0 * 60 ) + 37 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 11 :
sum = ( 2 * 60 ) + 39 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
case 12 :
sum = ( 4 * 60 ) + 37 + (dayIndex! * 4) + ( hourIndex! * 60 ) + minIndex!
if sum > 1440 {
sum -= 1440
}
default :
break
}

因為if 不能算連續區間,所以用&&來判斷。

//以判斷式判斷上升星座
if (18 * 60 <= sum) && (sum < 19 * 60 + 29){
let StarSing = "aries" //牡羊座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (19 * 60 + 29 <= sum) && (sum < 21 * 60 + 11){
let StarSing = "taurus" //金牛座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (21 * 60 + 11 <= sum) && (sum < 23 * 60 + 13){
let StarSing = "gemini" //雙子座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (23 * 60 + 13 <= sum) && (sum < 24 * 60){
let StarSing = "cancer" //巨蟹座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (sum < 1 * 60 + 29){
let StarSing = "cancer" //巨蟹座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (1 * 60 + 29 <= sum) && (sum < 3 * 60 + 46){
let StarSing = "leo" //獅子座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (3 * 60 + 46 <= sum) && (sum < 6 * 60){
let StarSing = "virgo" //處女座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (6 * 60 <= sum) && (sum < 8 * 60 + 13){
let StarSing = "libra" //天平座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (8 * 60 + 13 <= sum) && (sum < 10 * 60 + 30){
let StarSing = "scorpio" //天蠍座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (10 * 60 + 30 <= sum) && (sum < 12 * 60 + 46){
let StarSing = "sagittarius" //射手座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (12 * 60 + 46 <= sum) && (sum < 14 * 60 + 48){
let StarSing = "capricorn" //魔羯座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (14 * 60 + 48 <= sum) && (sum < 16 * 60 + 30){
let StarSing = "aquarius" //水瓶座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
} else if (16 * 60 + 30 <= sum) && (sum < 18 * 60){
let StarSing = "pisces" //雙魚座
//回傳網頁
if let url = URL(string: "https://wisdom-life.in/article/star-sign/about-ascendant-\(String(StarSing))") {
let request = URLRequest(url: url)
webView.load(request)
}
}

附上github~

--

--

HydeeChen
彼得潘的 Swift iOS / Flutter App 開發教室

純種文組生轉職程式異世界 持續學習swift, Objective C, flutter…