この投稿は今後も継続的に更新される予定です。
記事に対してご提案がありましたら、編集するか以下にコメントを投稿してください。
私について
数日前にSwiftプログラミングについての記事を書き始めました。是非ともこちらで記事をご覧ください。また、今後の更新に向けて @MaShunzhe、Twitter上でもフォローしていただくようお願いします!
記事上で:
⭐️ Date().文() //2020-05-12
⭐️ Date().取得(.month)
⭐️ tableView.最上部()
⭐️ tableView.最下部()
⭐️ "こんにちは".アラートを表示(on: self).
⭐️ view1.丸みのあるボーダー()
⭐️ view2.丸め()
⭐️ view.スクリーンショット()
⭐️ getUISceneDelegate()
⭐️ getUIApplicationDelegate()
"Extension"とは
Swiftにおいて、Extensionsとは既存クラスの機能を拡張する手段です。自分で作成するか、システムフレームワークに含まれており、プログラミング作業を楽にしてくれます。
クラスを拡張する方法は?
extension : "class 名" { //TODO: あなたのコード }
Xcodeプロジェクトの任意の場所に作成したファイルに拡張コードを記述すれば、別のファイルから利用することができます。 https://docs.swift.org/swift-book/LanguageGuide/Extensions.html
便利な拡張
私が自分のプログラムで利用した便利な拡張を紹介します。
ここにコード: https://github.com/mszopensource/Swift-Extensions
import SwiftExtensions
Date
extension Date {
/*
日付オブジェクトの分かりやすい説明を取得する
Get the plain words description from a date object
*/
func getString() -> String {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter.string(from: self)
}
func 文() -> String { return getString() }
func getComponent(_ component: Calendar.Component) -> Int {
return Calendar.current.component(component, from: self)
}
func 取得(_ component: Calendar.Component) -> Int { getComponent(component) }
}
使用法
Date().文() //2020-05-12
Date().取得(.month) //5
String
extension String {
/*
文字列を渡してシンプルなUIAlertControllerを表示する。
Show a simple UIAlertController with the given string.
*/
func showSimpleAlert(on: UIViewController?) {
guard let onVC = on else { return }
DispatchQueue.main.async {
let alert = UIAlertController(title: "アラート", message: self, preferredStyle: .alert)
let actionDismiss = UIAlertAction(title: "キャンセル", style: .cancel, handler: nil)
alert.addAction(actionDismiss)
onVC.present(alert, animated: true, completion: nil)
}
}
func アラートを表示(on: UIViewController?) {
showSimpleAlert(on: on)
}
}
使用法
"こんにちは".アラートを表示(on: self)
UITableView
extension UITableView {
/*
UITableViewを最上部にスクロールする
Scroll the UITableView to the top
*/
func scrollToTop() {
DispatchQueue.main.async {
let indexPath = IndexPath(row: 0, section: 0)
self.scrollToRow(at: indexPath, at: .top, animated: false)
}
}
func 最上部(){
scrollToTop()
}
/*
UITableViewを最下部にスクロールする
Scroll the UITableView to the bottom
*/
func scrollToBottom(){
DispatchQueue.main.async {
let indexPath = IndexPath(
row: self.numberOfRows(inSection: self.numberOfSections-1) - 1,
section: self.numberOfSections - 1)
self.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
}
func 最下部(){
scrollToBottom()
}
}
使用法
//@IBOutlet weak var tableView: UITableView!
tableView.最上部()
tableView.最下部()
UIView
public extension UIView {
/*
ボーダーで縁取られ、丸みを帯びたボタンとしてUIViewを設定する。
*/
func setUpOutlinedRoundButton(color: UIColor = .systemPink) {
self.layer.cornerRadius = 10
self.layer.borderColor = color.cgColor
self.layer.borderWidth = 2
self.clipsToBounds = true
}
func 丸みのあるボーダー(color: UIColor = .systemPink) {
setUpOutlinedRoundButton(color: color)
}
/*
丸みを帯びたボタンとしてUIViewを設定する
*/
func setUpRoundButton(color: UIColor = .systemPink) {
self.layer.cornerRadius = 10
self.backgroundColor = color
self.clipsToBounds = true
}
func 丸め(color: UIColor = .systemPink){
setUpRoundButton(color: color)
}
func takeScreenshot() -> UIImage? {
// Begin context
UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale)
// Draw view in that context
drawHierarchy(in: self.bounds, afterScreenUpdates: true)
// And finally, get image
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
func スクリーンショット() -> UIImage? { return takeScreenshot() }
}
使用法
//@IBOutlet weak var button1: UIView!
//@IBOutlet weak var button2: UIView!
button1.丸みのあるボーダー()
button2.丸め()
UIColor
public extension UIColor {
/*
オーシャンブルー
*/
class var oceanBlue: UIColor {
return .init(red: 0, green: 105/255, blue: 148/255, alpha: 1)
}
class var オーシャンブルー: UIColor { return oceanBlue }
/*
ライトスカイブルー
*/
class var lightSkyBlue: UIColor {
return .init(red: 135/255, green: 206/255, blue: 235/255, alpha: 1)
}
class var ライトスカイブルー: UIColor { return lightSkyBlue }
/*
スカイブルー
*/
class var skyBlue: UIColor {
return .init(red: 0, green: 191/255, blue: 255/255, alpha: 1)
}
class var スカイブルー: UIColor { return skyBlue }
/*
フォレストグリーン
*/
class var forestGreeen: UIColor {
return .init(red: 34/255, green: 139/255, blue: 34/255, alpha: 1)
}
class var フォレストグリーン: UIColor { return forestGreeen }
/*
イエローグリーン
*/
class var yellowGreen: UIColor {
return .init(red: 154/255, green: 205/255, blue: 50/255, alpha: 1)
}
class var イエローグリーン: UIColor { return yellowGreen }
}
UIViewController
public extension UIViewController {
@available(iOS 13.0, *)
func getUISceneDelegate() -> UISceneDelegate? {
return self.view.window?.windowScene?.delegate
}
@available(iOS 13.0, *)
func getUIApplicationDelegate() -> UIApplicationDelegate? {
return UIApplication.shared.delegate
}
}
コード
iOS開発、Swift、プログラミングに関することなら何でも、遠慮なくTwitterで質問してください。
@MaShunzhe