SwiftUI学习笔记

基本组件的使用

Text

简介

显示文本的组件

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

import SwiftUI

struct ContentView: View {
var body: some View {
Text("文本")
.foregroundColor(.blue) /// 文本颜色
.bold() /// 粗体
.italic() /// 斜体
.font(.system(.largeTitle)) /// 字体
.fontWeight(.medium) /// 字重
.shadow(color: .black, radius: 1, x: /*@START_MENU_TOKEN@*/0.0/*@END_MENU_TOKEN@*/, y: 2) /// 阴影

}
}
阅读全文 »

算法题: 找到它

标题: 找到它

题描述

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。假定给定的单词是HELLOWORLD,在矩阵中只需要找到H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。
注意区分英文字母大小写, 并且只能上下左右行走,不可以回头

阅读全文 »

CGO中处理C中的回调函数

假设有以下 C语言的接口

api.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef API_H
#define API_H

#ifdef __cplusplus
extern "C" {
#endif

typedef void (*IntCallback)(void *, int);

void SetIntCallback(IntCallback cb, void *data);

void DoIntCallback(int value);

#ifdef __cplusplus
}
#endif
#endif
阅读全文 »

CGO 中对C语言的void *void **的处理

1. void *unsafe.Pointer

  • CGO中的 unsafe.Pointer与C语言中的 void *是对应的
  • Go中的结构体如果要传入 C语言的某个函数作为参数, 可以使用 unsafe.Pointer来转化
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package main

/*

//假设这段定义在外部C源码中对cgo不可见
//typedef struct User {
// int id;
// int age;
// int number;
//} User;



static void User_SetId(void *user, int id) {
((User *)user)->id = id;
}

static void User_SetAge(void *user, int age) {
((User *)user)->age = age;
}

static void User_SetNumber(void *user, int number) {
((User *)user)->number = number;
}
*/
import "C"

import (
"fmt"
"unsafe"
)

type User struct {
Id int32
Age int32
Number int32
}

func main() {
var user User

pointer := unsafe.Pointer(&user)

C.User_SetId(pointer, C.int(1))
C.User_setAge(pointer, C.int(25))
C.User_setNumber(pointer, C.int(10001))

fmt.Println(user)

}
阅读全文 »

CGO中的一些使用注意事项

1. CGO中的内容必须紧挨着import "C", 中间不得有其他import

  • 错误示范
1
2
3
4
5
6
7
8
9
package main

// #include <stdio.h>
import "fmt"
import "C"

func main() {
fmt.Println(C.puts(C.CString("这是一个golang字符串")))
}
阅读全文 »