ふるすたっくえんじにあっぽい人の日記

ASP .NET MVC (C#)、.NET Framework、iOS (Objective-c) アプリ、Androidアプリ (Java)、AWS、たまにLAMPとかプロジェクトマネジメントあたりのお話

【iOS,Swift3】Extension晒す〜番外編〜Propertiesの巻

表題の通りです。ご査収ください。

import Foundation

public protocol Properties {
    
    func properties() -> [String: Any?]
}

extension Properties {
    
    public func properties() -> [String: Any?] {
        var dic = [String: Any?]()
        Mirror(reflecting: self).superclassMirror?.children.forEach { (child) in
            if let key = child.label {
                dic[key] = child.value
            }
        }
        Mirror(reflecting: self).children.forEach { (child) in
            if let key = child.label {
                dic[key] = child.value
            }
        }
        return dic
    }
}

補足。こんな感じで使います。

internal class Hoge: Properties {

    internal var printProperties {
        properties().forEach { (key, value) in
            print("PropertyName: \(key) \nValue:\(String(describing: value))")
        }
    }
}


【iOS,Swift3】Extension晒す〜Date編〜

表題の通りです。ご査収ください。

import Foundation

extension Date {
    
    // MARK: - public property
    
    /// 週あたりの日数
    public var daysPerWeek: Int {
        get {
            return 7
        }
    }
    
    /// 月の初めの日
    public var firstDateOfMonth: Date {
        get {
            let calendar = NSCalendar.current
            var components = calendar.dateComponents([.year, .month, .day], from: self)
            components.day = 1;
            return calendar.date(from: components)!
        }
    }
    
    /// 月の週数
    public var numberOfWeeksForMonth: Int {
        get {
            let rangeOfWeeks = NSCalendar.current.range(of: Calendar.Component.weekOfMonth,
                                                        in: Calendar.Component.month,
                                                        for: firstDateOfMonth)
            return (rangeOfWeeks?.count)!
        }
    }
    
    /// 月の日数
    public var numberOfDaysForMonth: Int {
        get {
            let rangeOfDays = NSCalendar.current.range(of: Calendar.Component.day,
                                                       in: Calendar.Component.month,
                                                       for: firstDateOfMonth)
            return (rangeOfDays?.count)!
        }
    }

    // MARK: - public method

    /// toString()
    ///
    /// - Parameter format: フォーマット
    /// - Parameter calendarIdntifier: カレンダーIdentifier
    /// - Returns: 文字列
    public func toString(format: String, calendarIdentifier: Calendar.Identifier = .gregorian) -> String {
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: calendarIdentifier)
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
    
    /// fromString()
    ///
    /// - Parameters:
    ///   - string: 文字列
    ///   - format: フォーマット
    /// - Parameter calendarIdntifier: カレンダーIdentifier
    /// - Returns: Date
    public static func fromString(_ string: String, format: String, calendarIdentifier: Calendar.Identifier = .gregorian) -> Date? {
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: calendarIdentifier)
        formatter.dateFormat = format
        return formatter.date(from: string)
    }
}


【iOS,Swift3】Extension晒す〜Array編〜

Androidエンジニアと見せかけて、
iOSエンジニア風を装って、
Unityエンジニアのふりして、
インフラエンジニアもちょっと名乗って、
当たり前のようにWebエンジニアとして仕事もするけど、
本業は未だに.NETエンジニアと思いたいけどたぶんもう無理で、
実際の身分はCEOとプレCTOとアプリ開発責任者の伊豆丸さんです。

表題の通りです。ご査収ください。

import Foundation

extension Array where Element: Hashable, Element: Equatable {
    
    public func diff(_ other: [Element]) -> [Element] {
        let all = self + other
        var counter: [Element: Int] = [:]
        all.forEach { counter[$0] = (counter[$0] ?? 0) + 1 }
        return all.filter { (counter[$0] ?? 0) == 1 }
    }
    
    public func subtracting(_ other: [Element]) -> [Element] {
        return self.flatMap { element in
            if (other.filter { $0 == element }).count == 0 {
                return element
            } else {
                return nil
            }
        }
    }
    
    public mutating func subtract(_ other: [Element]) {
        self = subtracting(other)
    }
}


【iOS】URLからUIImageViewに画像表示 Swift3版

タイトルまんま
まともにちゃんと書いてあるのがなかったので

extension UIImageView {    
    public func setImage(fromUrl url: String) {
        URLSession.shared.dataTask(with: URLRequest(url: URL(string: url)!)) { (data, response, error) in
            guard let data = data, let _ = response, error == nil else {
                return
            }
            DispatchQueue.main.async(execute: {
                self.image = UIImage(data: data)
            })
        }.resume()
    }
}


f:id:devdevdev:20170403122736j:plain

花の香りがそよ風に運ばれてくる候となりました。
皆様、いかがお過ごしでしょうか。

って言いたかっただけ。
ネタがない。
うーん。
今まで書いた技術ネタもちょっと古くなってきたからか、ちょっとアクセス少ないし。
うーん。
書きたいことは山ほどあるんですが!書けるネタが!ない!
うーん。

春爛漫のこの頃、健やかなる日々をお過ごしください。


【iOS】CocoaPodsをアップデートしたあとにやること

タイトルの通りー
ちょっとハマったので。

とりあえず、
sudo gem clean cocoapods
sudo gem update cocoapods
sudo gem update

んで、
sudo rm -rf ~/Library/Caches/CocoaPods/
sudo rm -rf ~/.cocoapods/repos/master/
pod setup

プロジェクト側で、
rm -rf Pods/
pod update

pod setupはちょっと時間掛かるけどねー

いじょー


三十路

なりました。
20代を振り返る&30代の目標

■振り返り
・20〜22歳
身分は大学生でした。
大学にはほとんど行かず水商売してました。
普通のバイトもしてたけど。
なぜ卒業できたのかは今でもわかりませんが、卒業させてもらえてよかったです。
飲むのは朝7時頃から昼くらいまで。

・22歳〜25歳
上場企業にお勤めでした。
予定がなければ平日5時間、休日はほぼ一日中勉強してました。
とにかく個人的に勉強がしたかったので、本当に入社してよかったです。
飲むのは夕方18時頃から終電なくすまで。

・26歳
SAPにお勤めでした。
エンジニアとしての最盛期でした。
入社してからチーフエンジニアになるまでが人生で唯一仕事が楽しい時期でした。
とにかくどブラックでがむしゃらに働きたかったので、本当に入社してよかったです。
飲むのは終電がとっくのとうになくなってから晩御飯がてら。
べろべろになっても仕事できるようになったのがこの頃。
携帯とPCを肌身離さず持ち歩くようになったのもこの頃。

・27歳
フリーランス+CTOでした。
時々ニートでした。
引きこもりがちでした。

・28歳
CEOでした。
時々ニートでした。
お付き合いの飲みが多かったです。

・29歳
CEO+開発責任者でした。
前半は派手に遊び回ってました。
後半はうにゃうにゃしてました。

20代後半のやる気のなさw

■30代の目標
・akippaさん
がんばります。
自分がこんなにバリュー出してない仕事とか会社は初めてです。
ごめんなさい。
さっさとバリュー出しますw

・Arrvisさん
当面は本体の安定運営。組織作り。
あんまり従業員かまってないので、ちゃんとかまうw
ホールディングス化。
ホールディングス化は設立当初からずっと言ってるねん。実は。
とりあえず今年1社は子会社設立して、その他に1社くらいは買収したいな。
30代終わるまでには子会社10社目標。

・スタートアップ
作る。2年でバイアウト目標。
Arrvisさんとは無関係のところで。
オーナー社長とスタートアップ社長って全く別物なんすよね。
前者は経営者で、後者は起業家って言ったほうがいいよね。
誰にというのは別にないし、それぞれに優劣をつけるつもりはないけど、なんか経営者ぶってる起業家とか、起業家ぶってる経営者見るといらっとするからスタートアップ作る。
んで、勝つ。経営者としても起業家としても成功する。

・プライベート
色々片付けたい。
35歳までには資産作って、自社ビルおっ建てて、会社とか全部人に任せて、南の島で利益度外視のサービス作ったり、利益度外視の飲食店やったり、悠々自適に暮らしたい。

とゆー感じで夢はでっかくがんばりますので、皆様今後とも宜しくお願いします\(^o^)/