Mobile App Dev 2021W: Tutorial 10: Difference between revisions
Created page with " ==Code== ===ViewController.swift=== <syntaxhighlight lang="swift" line> // // ViewController.swift // Converter-SB // // Created by Anil Somayaji on 2021-04-06. // impo..." |
|||
Line 1: | Line 1: | ||
==Code== | ==Code== | ||
===Conversions.swift=== | ===Conversions.swift=== | ||
Line 92: | Line 48: | ||
let availConversions = [String] (conversions.keys) | let availConversions = [String] (conversions.keys) | ||
</syntaxhighlight> | |||
===ViewController.swift=== | |||
<syntaxhighlight lang="swift" line> | |||
// | |||
// ViewController.swift | |||
// Converter-SB | |||
// | |||
// Created by Anil Somayaji on 2021-04-06. | |||
// | |||
import UIKit | |||
class ViewController: UIViewController { | |||
@IBOutlet var fromField: UITextField! | |||
@IBOutlet weak var result: UILabel! | |||
@IBOutlet weak var convButton: UIButton! | |||
var convIndex = 0 | |||
var conv = conversions[availConversions[0]]! | |||
override func viewDidLoad() { | |||
super.viewDidLoad() | |||
// Do any additional setup after loading the view. | |||
} | |||
@IBAction func updateConversion() { | |||
convIndex = (convIndex + 1 ) % availConversions.count | |||
conv = conversions[availConversions[convIndex]]! | |||
convButton.setTitle("Conversion: \(availConversions[convIndex])", for: .normal) | |||
} | |||
@IBAction func doConversion() { | |||
if let fromS = fromField.text { | |||
if let from = Double(fromS) { | |||
result.text = | |||
conv.formatConversion(from) | |||
} else { | |||
result.text = "Please enter a number." | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 02:37, 7 April 2021
Code
Conversions.swift
// Conversions.swift
struct Converter {
var convFrom = "From Type"
var convTo = "To Type"
var convert: (_ from: Double) -> Double?
func formatConversion(_ from: Double) -> String {
if let to = self.convert(from) {
let toS = String(format: "%.3f", to)
return "\(from) \(self.convFrom) is \(toS) \(self.convTo)."
} else {
return "Converting \(from) \(convFrom) to \(self.convTo) failed."
}
}
init(_ from: String, _ to: String, _ f: @escaping (_ from: Double) -> Double?) {
self.convFrom = from
self.convTo = to
self.convert = f
}
}
func InToCM(_ inch: Double) -> Double {
let cm = 2.54 * inch
return cm
}
let conversions =
["F to C": Converter("Farenheit", "Celsius",
{F in return ((F - 32.0)*(5/9))}),
"C to F": Converter("Celsius", "Farenheit",
{C in return ((9/5)*C + 32.0)}),
"km to mi": Converter("kilometers", "miles",
{k in
let m = k * 0.6213712
return m
}),
"inch to cm": Converter("inches", "centimeters",
InToCM)
]
let availConversions = [String] (conversions.keys)
ViewController.swift
//
// ViewController.swift
// Converter-SB
//
// Created by Anil Somayaji on 2021-04-06.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet var fromField: UITextField!
@IBOutlet weak var result: UILabel!
@IBOutlet weak var convButton: UIButton!
var convIndex = 0
var conv = conversions[availConversions[0]]!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func updateConversion() {
convIndex = (convIndex + 1 ) % availConversions.count
conv = conversions[availConversions[convIndex]]!
convButton.setTitle("Conversion: \(availConversions[convIndex])", for: .normal)
}
@IBAction func doConversion() {
if let fromS = fromField.text {
if let from = Double(fromS) {
result.text =
conv.formatConversion(from)
} else {
result.text = "Please enter a number."
}
}
}
}
Main.storyboard
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="Converter_SB" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="VJ7-bt-qir">
<rect key="frame" x="0.0" y="122" width="375" height="34"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
<connections>
<action selector="doConversion" destination="BYZ-38-t0r" eventType="editingChanged" id="WEr-SS-N11"/>
</connections>
</textField>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="QgR-df-1nY">
<rect key="frame" x="0.0" y="44" width="375" height="30"/>
<state key="normal" title="Button"/>
<connections>
<action selector="updateConversion" destination="BYZ-38-t0r" eventType="touchUpInside" id="u10-i8-VVe"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QHi-YO-lly">
<rect key="frame" x="0.0" y="164" width="375" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="VJ7-bt-qir" secondAttribute="trailing" id="1By-U1-T9I"/>
<constraint firstItem="QgR-df-1nY" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="3rM-HL-fub"/>
<constraint firstItem="QHi-YO-lly" firstAttribute="top" secondItem="VJ7-bt-qir" secondAttribute="bottom" constant="8" id="4Mw-3g-c0Y"/>
<constraint firstItem="VJ7-bt-qir" firstAttribute="top" secondItem="QgR-df-1nY" secondAttribute="bottom" constant="48" id="IBz-Q9-HJr"/>
<constraint firstAttribute="trailing" secondItem="QHi-YO-lly" secondAttribute="trailing" id="LsV-b9-Mq7"/>
<constraint firstItem="QHi-YO-lly" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="NS2-ki-p00"/>
<constraint firstItem="QHi-YO-lly" firstAttribute="top" secondItem="VJ7-bt-qir" secondAttribute="bottom" constant="8" symbolic="YES" id="NX0-K4-DfK"/>
<constraint firstAttribute="trailing" secondItem="QgR-df-1nY" secondAttribute="trailing" id="ckB-TL-gBc"/>
<constraint firstItem="QgR-df-1nY" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="44" id="q2m-Gg-fyA"/>
<constraint firstItem="VJ7-bt-qir" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="tT6-p8-3IJ"/>
</constraints>
</view>
<connections>
<outlet property="convButton" destination="QgR-df-1nY" id="6Dj-hw-rOA"/>
<outlet property="fromField" destination="VJ7-bt-qir" id="hkS-Oj-aWr"/>
<outlet property="result" destination="QHi-YO-lly" id="QEU-E4-Ty3"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-215" y="40"/>
</scene>
</scenes>
<resources>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>