self-learning note
int -> %d
stinrg-> %s
func foo(a int, b string) string {
return fmt.Sprintf("%d %s", a, b)
}
*string -> %p
var ptr *string // 宣告一個指向字串的指標變數ptr
fmt.Printf("%p \n", ptr) // 印出: 0x0 (尚未指派記憶體位置)
self-learning note
int -> %d
stinrg-> %s
func foo(a int, b string) string {
return fmt.Sprintf("%d %s", a, b)
}
*string -> %p
var ptr *string // 宣告一個指向字串的指標變數ptr
fmt.Printf("%p \n", ptr) // 印出: 0x0 (尚未指派記憶體位置)
iOS13 no shadow explain
iOS14之前 UIStackView的layer是CATransformLayer
. -> 陰影 無效
iOS14之後 UIStackView的layer是CALayer
.-> 陰影 有效
可以在UIStackView外面包一層UIView 上陰影做舊版本支援
參考
https://useyourloaf.com/blog/stack-view-background-color-in-ios-14/
做第一個自己的framework
來自 https://www.youtube.com/watch?v=TCnhvHUcjrY
可以當作做一個自己的第三方資料庫使用。
開一個project 例如: CoolUI
然後打包後,放到專案裡面,
** ARCHIVE SUCCEEDED **
import CoolUI 後就可以使用裡面方法。
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
Debug choose
This is from https://www.avanderlee.com/combine/runloop-main-vs-dispatchqueue-main/
receive(on:options:)
Same
Different
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!!!
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
/## Swift
class Person: NSObject {
var _name: String
init(name: String){
_name = name
}
function setName(name:String){
_name = name
}
}
run in playground
Person.setName(“Dancer”)
/##ObjC
@interface Person : NSObject {
NSString* _name;
}
-(void)setName: (NSString*) name;
-(NSString*) name;
@end
@Implementation Person
-(void)setName: (NSString * )name {
_name = name;
}
-(NSString*) name {
return _name;
}
Actually, run in Main.m
Person* p1 =[Person new];
[p1 setName:@”Dancer”];
NSLog(@”%ld”, [p1 age]);