Mario tsai

做第一個自己的framework

來自 https://www.youtube.com/watch?v=TCnhvHUcjrY

可以當作做一個自己的第三方資料庫使用。

開一個project 例如: CoolUI

然後打包後,放到專案裡面,

** ARCHIVE SUCCEEDED **

import CoolUI 後就可以使用裡面方法。

  1. Create framework

2. Add needed classes

3. Build Settings / Build Libraries for Distribution set YES

4. Build Settings / Skip Install set NO

5. Open termnial

6. cd and drag the folder with project

7. run three scripts in turn, which are located at the bottom (!) Don’t forget replace “PROJECTNAME_HERE” & “”FRAMEWORK_NAME” on your project name.

xcodebuild archive -scheme PROJECTNAME_HERE -destination=”iOS” -archivePath /tmp/xcf/ios.xcarchive -derivedDataPath /tmp/iphoneos -sdk iphoneos SKIP_INSTALL=NO

xcodebuild archive -scheme PROJECTNAME_HERE -destination=”iOS Simulator” -archivePath /tmp/xcf/iossimulator.xcarchive -derivedDataPath /tmp/iphoneos -sdk iphonesimulator SKIP_INSTALL=NO

xcodebuild -create-xcframework -framework /tmp/xcf/ios.xcarchive/Products/Library/Frameworks/PROJECTNAME_HERE.framework -framework /tmp/xcf/iossimulator.xcarchive/Products/Library/Frameworks/PROJECTNAME_HERE.framework -output FRAMEWORK_NAME.xcframework

--

--

under iOS13

class viewModel: {    var reloadCount: Int = 0    //ViewModel send to View   => react the event
var reloadCollectionView: ( ()->() )?

//View call ViewModel => user touch the Buttom (event)
func onTapCellButton() {
//changeDataFirst
reloadCount += 1 self. reloadCollectionView?()
}
}

--

--

It’s a true story. It happens by accident.

class VC1 :UIViewController() {  let viewModel = VC1ViewModel()  func callVC2(){     let vc2 = UIViewController()     vc2.onTap = { (value) in         self.viewModel.callMom()  }  deinit(){
print("VC1 dead")
}
}

So, When VC1 dismiss or popup. VC2 and viewModel still in alive.

It prints nothing.

Change callVC2 like this

func callVC2(){    let vc2 = UIViewController()    vc2.onTap = { [weak self] (value) in        self?.viewModel.callMom()}

When VC1 dismiss or popup, Your memory is free!!!

--

--

快速入門

use Realm

let realm = try! Realm()

Make a Model

import Foundation

import RealmSwift

class LogData: Object{

@Persisted(primaryKey: true) var _id: ObjectId

@Persisted var date: String?

@Persisted dynamic var time: String?

convenience init(content: String){

self.init()

}

}

func addNewLog(_ time:String,_ date:String) -> LogData{

let newLog = LogData()

newLog.time = time

newLog.date = date

return newLog

}

func save() {

let newLog = self.addNewLog(selectedTime, didSelectDate)

try! realm.write{

realm.add(newLog)

}

print(newLog)

}

--

--

增刪改檔案後記得下 composer dump-autoload

### 顯示路由
php artisan route:list

### new 一個controller
//做一個ProductController
php artisan make:controller ProductController

//做一個ProductController 包含基本的增刪修改
php artisan make:controller ProductController — resource

ps: Laravel8 用router 要在RouteServiceProvider 裡面增加變數 protected $namespace = ‘App\Http\Controllers’;

### new 一個table
//做一張表 members
php artisan make:migration create_members

##### Route Bug
-> php artisan serve 後連接有正常accept close,但是沒有畫面
-> 有重複的路徑 檢查Route 然後下 php artisan optimize 清掉cache

--

--

Big company has lots of ObjC code

Swfit -> ObjC

/##Swift

var name:String = Mario

print(name)

/## ObjC

@interface ViewController ()

@property (nonatomic, strong) NSString* userName;

@end

@implementation ViewController

NSLog(@”%@”, self.userName);

@end

--

--

Mario tsai

Mario tsai

Major in physical education. Football referee. And high interest in looking the world through the numbers.