티스토리 뷰
반응형
SMALL
※ 개인적으로 정리 하려는 페이지 입니다.
예를들어 String 의 값이 Empty 를 체크 한다고 가정
interface Callback {
fun notEmptyString(param: String)
}
// 1단계 ( interface Callback Class 참조 )
fun notEmptyString_Stap1(param: String?, callback: Callback) {
if (!param.isNullOrEmpty()) {
callback.notEmptyString(param)
}
}
// Use
private lateinit var data: String
data = "text" // 무언가 통신을 하거나 결과값을 data 로 받는다고 가정한다.
// 1단계 use
notEmptyString_Stap1(data, object: Callback {
override fun notEmptyString(param: String) {
print("Stap1")
}
})
// 2단계 ( interface Callback Class 참조 )
fun String?.notEmptyString_Stap2(callback: Callback) {
if (!this.isNullOrEmpty()) {
callback.notEmptyString(this)
}
}
// Use
private lateinit var data: String
data = "text" // 무언가 통신을 하거나 결과값을 data 로 받는다고 가정한다.
// 2단계 use
data.notEmptyString_Stap2(object: Callback {
override fun notEmptyString(param: String) {
print("Stap2")
}
})
반응형
// 3단계 High Order Function
fun String?.notEmptyString_Stap3(callback: (String) -> Unit) {
if (!this.isNullOrEmpty()) {
callback(this)
}
}
fun String?.notEmptyString_Stap3(callback: (String) -> Unit, callback2: () -> Unit) {
if (!this.isNullOrEmpty()) {
callback(this)
}
}
// Use
private lateinit var data: String
data = "text" // 무언가 통신을 하거나 결과값을 data 로 받는다고 가정한다.
// 3단계 use
data.notEmptyString_Stap3 {
print("Stap3")
}
data.notEmptyString_Stap3({
print("Stap3 $it")
}, {
print("Stap3 여긴 뭐지??")
})
// DSL ?? ( Domain - specific Language )
// inline
inline fun String?.notEmptyString_Stap4(callback: (String) -> Unit) {
if (!this.isNullOrEmpty()) {
callback(this)
}
}
// Use
private lateinit var data: String
data = "text" // 무언가 통신을 하거나 결과값을 data 로 받는다고 가정한다.
data.notEmptyString_Stap4 {
print("Stap4 $this")
}
// KTX??
// 토스트를 메소드 형식으로 이뿌게 간결하게 쓸 수 있다.
inline fun Context.toast(text: CharSequence, duration: Int = Toast.LENGTH_SHORT): Toast =
Toast.makeText(this, text, duration).apply { show() }
// use
toast("HI Inline Toast")
// infix 를 적용 하면?
infix fun Context.toast_withInfix(message: () -> String) {
toast(message())
}
//use
toast_withInfix {
"HI Infix Toast"
}
토스트 메세지와 Duration 을 같이 적용 하려면 ?
// Message & Duration 함께 사용한다 ?
data class ToastData(val message: String, val duration: Int)
class ToastDataBuilder {
var message: String = ""
var duration: Int = Toast.LENGTH_SHORT
fun build(): ToastData = ToastData(message, duration)
}
inline infix fun Context.toast_withDuarInput(body: ToastDataBuilder.() -> Unit) {
val builder = ToastDataBuilder()
builder.body()
val item = builder.build()
toast(item.message, item.duration)
}
//use
toast_withDuarInput {
message = "HI Infix Toast Duar Input!"
duration = Toast.LENGTH_LONG
}
// Pair를 이용해서 다르게 처리 할 수 있다.
inline infix fun Context.toast_withPairInput(body: () -> Pair<String, Int>) {
val (message, duration) = body()
toast(message, duration)
}
//use
toast_withPairInput {
"HI Infix Toast Pair Input!!" to Toast.LENGTH_LONG
}
반응형
LIST
'Android > Etc' 카테고리의 다른 글
[ Etc #6 ] Android Studio 무선 디버깅 ( 11 이전 / 이후 ) (1) | 2022.09.15 |
---|---|
[ Etc #5 ] 이미지에서 텍스트 읽어오기 ( Feat. ML Kit ) (0) | 2022.09.13 |
[ Etc #4 ] Chuck Library ( with OkHttp ) (0) | 2020.04.27 |
[ Etc #2 ] Android Studio 내 라이브러리 만들기 ( AAR Ver ) (0) | 2020.01.16 |
[ Etc #1 ] KDoc ( Kotlin Document ) with Dokka (0) | 2020.01.16 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Android
- flutter web
- 맥 전용
- 폴더블 상태 유지
- 갤럭시 워치
- 프래그먼트 데이터 저장
- Fragment data
- widget 이미지 로딩
- 역시 키크론이네
- 안드로이드 폴드 대응
- widget onupdate
- 폰과 워치 페어링
- Android Wear Os
- Foldable Event
- 랜덤컬러
- widget onreceive
- 안드로이드 플립 대응
- widget glide
- 웨어러블
- 풀배열 키보드
- wear os
- Dot indicator
- android widget 만들기
- widget 만들기
- 폴더블 이벤트 받기
- 쏘렌토 하이브리드 시그니처
- 가중치랜덤
- aos img url bitmap
- 쏘렌토 하이브리드
- RandomColor
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함