小编Mic*_*sen的帖子

Swift:带有中心圆形按钮的自定义 TabBar

我尝试创建如下图所示的自定义标签栏: 在此处输入图片说明

下面是我得到的结果: 在此处输入图片说明

以下是我当前的代码:

class CustomTabBarController: UITabBarController {


    override func viewDidLoad() {
        super.viewDidLoad()

        let controller1 = UIViewController()
        controller1.tabBarItem = UITabBarItem(tabBarSystemItem: .contacts, tag: 1)
        let nav1 = UINavigationController(rootViewController: controller1)

        let controller2 = UIViewController()
        controller2.tabBarItem = UITabBarItem(tabBarSystemItem: .contacts, tag: 2)
        let nav2 = UINavigationController(rootViewController: controller2)

        let controller3 = UIViewController()
        let nav3 = UINavigationController(rootViewController: controller3)
        nav3.title = ""

        let controller4 = UIViewController()
        controller4.tabBarItem = UITabBarItem(tabBarSystemItem: .contacts, tag: 4)
        let nav4 = UINavigationController(rootViewController: controller4)

        let controller5 = UIViewController()
        controller5.tabBarItem = UITabBarItem(tabBarSystemItem: .contacts, tag: 5)
        let …
Run Code Online (Sandbox Code Playgroud)

tabbar uitabbarcontroller swift

7
推荐指数
1
解决办法
1万
查看次数

从关联值初始化枚举

我想通过其关联值初始化枚举。

我的枚举:

enum class DirectionSwiped(raw: Int){
    LEFT(4),
    RIGHT(8);
}
Run Code Online (Sandbox Code Playgroud)

我想这样初始化它:

val direction = DirectionSwiped(raw: 4)
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

枚举类型无法实例化

为什么会这样?在 Swift 中,这个功能是这样工作的:

enum Direction: Int {
    case right = 2
}

let direction = Direction(rawValue: 2)
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它在 Kotlin 中工作?

enums kotlin

6
推荐指数
1
解决办法
1743
查看次数

Swift:工厂模式,尝试实例化对象一次,可从所有控制器访问

我写了一个工厂模式(看起来像依赖注入),它可以完美地工作:

protocol Dependency {
    func resolveExtractIcon() -> ExtractIconService
}

class DependencyFactory: Dependency, HasDependencies {

    func resolveExtractIcon() -> ExtractIconService {
        return ExtractIcon()
    }

}


struct DependencyInjector {
    static var dependencies: Dependency = DependencyFactory()

    private init() {}
}

protocol HasDependencies {
    var dependencies: Dependency { get }
}

extension HasDependencies {
    var dependencies: Dependency {
        return DependencyInjector.dependencies
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的View控制器中,我可以这样称呼它:

class IOSAssetsViewController: NSViewController, HasDependencies {
    private lazy var assetsViewModel: AssetsViewModelService = dependencies.resolveExtractIcon()
}
Run Code Online (Sandbox Code Playgroud)

现在,我想在此设计模式中添加一次创建对象并将其注入到所需的视图控制器中的可能性。

例如,我有一个与我的项目中的三个视图控制器关联的viewModel,我希望当我在ViewController中修改viewModel时,它们在各处都被修改,因为它们使用相同的实例,即使ViewController并不存在也是如此。创建后,它将使用注入的viewModel和其他视图控制器所做的修改。

我尝试了很多可能性,并设法确保只有视图控制器在创建它们的同时访问同一实例,但是尚不存在的控制器(先创建视图控制器然后再访问一个新对象)而不是由视图控制器更改的对象:

 class DependencyFactory: Dependency, HasDependencies {

    // …
Run Code Online (Sandbox Code Playgroud)

design-patterns dependency-injection swift

5
推荐指数
0
解决办法
219
查看次数

Swift:有办法快速调试可解码对象

我有一个来自 20 个领域的对象。当我从服务器获取 json 时,我收到有关 json 解码的错误。

有一种方法可以快速找出哪个字段有问题,而不是删除所有字段并将其一个接一个放回以找出哪个字段有问题。

json swift codable

4
推荐指数
3
解决办法
2164
查看次数

SwiftUI:不要刷新自定义视图 MacOS 应用程序

你好,我想创建一个具有多个 webview 的应用程序,一旦它们被加载一次,我不想再重新创建它们,我希望它们保留它们的实例。

我在应用程序中创建了一个导航视图,其中包含 10 个站点的列表。当我单击列表中的某个项目时,我想使用 NavigationLink 显示相应的 Web 视图。有用。但问题是,如果我单击列表中的另一项,我将返回到上一项,它会返回主页,webview 会再次加载。我希望 webview 仅创建一次,并且只要应用程序处于活动状态就始终保持活动状态。我知道 swiftui 总是刷新视图是问题所在,如何防止我的 webview 被 swiftUI 刷新?

在 uitkit 中,很简单,我在应用程序启动时创建一个 wkwebview 数组,在一个单例类中加载所有 webview url。根据从表格视图中选择的项目,我显示相应的 wkwebview。即使我更改了该项目,即使我们看不到它们,我的所有网络视图仍然存在。

struct WebView : UIViewRepresentable {

    let request: URLRequest

    func makeUIView(context: Context) -> WKWebView  {
        let web = WKWebView()
        web.load(request)
        return web
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {

    }

}
Run Code Online (Sandbox Code Playgroud)

macos ios swift swiftui

2
推荐指数
1
解决办法
872
查看次数