小编Víc*_*tos的帖子

不支持使用某些协议作为符合其他协议的具体类型

我正在尝试将泛型与协议混合在一起,我的xD非常困难

我在Android/Java项目中实现了某些架构,我正在尝试重写它以适应swift/iOS项目.但我发现了这个限制.

ProtocolA

protocol ProtocolA {

}
Run Code Online (Sandbox Code Playgroud)

ProtocolB

protocol ProtocolB : ProtocolA {

}
Run Code Online (Sandbox Code Playgroud)

ImplementProtocolA

class ImplementProtocolA <P : ProtocolA> {

    let currentProtocol : P

    init(currentProtocol : P) {
        self.currentProtocol = currentProtocol
    }

}
Run Code Online (Sandbox Code Playgroud)

ImplementProtocolB

class ImplementProtocolB : ImplementProtocolA<ProtocolB> {

}
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试将ProtocolB设置为实现ProtocolA的具体类型时,我收到此错误:

不支持使用'ProtocolB'作为符合协议'ProtocolA'的具体类型

1这种"限制"有什么理由吗?

2是否有任何解决方法可以实现此功能?

3它会在某个时候得到支持吗?

- 更新 -

我认为同一问题的另一个变种是:

查看协议

protocol View {

}

protocol GetUserView : View {
    func showProgress()
    func hideProgress()
    func showError(message:String)
    func showUser(userDemo:UserDemo)
}
Run Code Online (Sandbox Code Playgroud)

演示者协议

protocol Presenter {
    typealias V : …
Run Code Online (Sandbox Code Playgroud)

protocols swift

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

Android Studio 1.2 beta版在调试时挂起

我刚刚将Android Studio从1.0版升级到1.2测试版,我无法再执行任何类型的调试操作.如果我设置了一个断点,Android Studio会挂起并且无法解析该命令:

Waiting until last debugger command completes
Run Code Online (Sandbox Code Playgroud)

但它永远不会完成.

那么,是否可以降级到之前的稳定版本(1.0)而无需再次下载?

谢谢!

debugging android hang android-studio

50
推荐指数
3
解决办法
7699
查看次数

Android上弃用了@SmallTest,@ MediumTest和@LargeTest

这3和注释@SmallTest,@MediumTest以及@LargeTest最近被弃用Android上.

但我找不到任何解释动机或提出新注释集的文档.

那么,现在有什么方法可以宣布测试的范围吗?

android

31
推荐指数
3
解决办法
4031
查看次数

导航架构组件 - 活动

我一直在关注导航架构组件的文档,以了解这个新导航系统的工作原理.

要从一个屏幕转到另一个屏幕,您需要一个实现NavHost接口的组件.

NavHost是一个空视图,当用户浏览您的应用程序时,目的地会被换入和换出.

但是,似乎目前只有Fragments实现 NavHost

Navigation Architecture Component的默认NavHost实现是NavHostFragment.

所以,我的问题是:

  • 即使我有一个非常简单的屏幕可以实现Activity,为了使用这个新的导航系统,Fragment需要托管包含实际视图?

  • 在不久的将来会Activity实现NavHost接口吗?

- 更新 -

根据ianhanniballake的回答,我了解每个活动都包含自己的导航图.但是,如果我想使用导航组件从一个活动转到另一个活动(替换"旧" startActivity呼叫),我可以使用activity destinations.什么是activity destinations我不清楚,因为迁移文档没有详细说明:

然后,可以通过向导航图添加活动目标来链接单独的活动,从而在整个代码库中替换startActivity()的现有用法.

  • 使用ActivityNavigator而不是有什么好处startActivity吗?
  • 使用导航组件时,从活动开始的正确方法是什么?

android android-architecture-navigation

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

悖论实例化

有没有想过实例化Paradox类而不修改类本身的想法?

public final class Paradox {
    private final Paradox paradox;

    public Paradox(Paradox paradox) {
        this.paradox = paradox;
        if (this.paradox == null) throw new InceptionException();
    }

    private static class InceptionException extends RuntimeException {
        public InceptionException() {
            super("Paradox requires an instance of paradox to be instantiated");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java

16
推荐指数
2
解决办法
998
查看次数

试图在iOS应用程序上使用"干净的架构"

最近我一直在重新思考我的android架构项目,试图让它适应更"干净的架构",特别是"Uncle Bob"所设计的那种设计.

它涉及几层抽象,一个很好的职责分离和依赖注入实现的非常强的依赖倒置; 最终,它导致了一个非常分离的便携式系统.通过单元测试和集成测试进行测试的完美候选者.

在我的Android实现中,我最终得到了三个不同的模块或层:

- :实体,交互者,演示者(纯java模块)

- data :(作为向域提供数据的存储库)(android库模块)

- 演示:ui相关的东西,片段,活动,视图等(android应用程序模块)

所以,我想弄清楚什么是iOS生态系统的最佳方法.我尝试创建一个包含多个目标的项目来实现相同的解决方案:

- domain:命令行目标(看起来很奇怪,但我认为是最纯粹的快速目标)

- 数据:可可触摸框架

- 演示:可可触摸框架

通过这种方法,我可以像使用android模块一样使用这些目标.但我发现第一个警告是我需要手动将每个新文件添加到依赖目标.

但是我的知识在有多个目标的项目中非常有限.我的意思是我从未创建过具有多个目标的iOS应用程序.所以即使解决方案是使用框架(cocoa touch/cocoa)作为目标而不是域层的命令行模块,我也不知道.

任何想法都会非常感激.

谢谢!

architecture android ios

13
推荐指数
1
解决办法
2986
查看次数

如何使用外部图中在嵌套图中声明的全局操作?

我尝试使用带有嵌套图形的 Safe Args使用全局操作,但出现错误。

片段A.kt :

class FragmentA : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_a, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        btFragmentB.setOnClickListener {
            NavHostFragment.findNavController(this)
                .navigate(FragmentBDirections.actionGlobalFragmentB())
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

片段B.kt :

class FragmentB : Fragment()
Run Code Online (Sandbox Code Playgroud)

主文件

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_nav_graph"
    app:startDestination="@id/fragmentA">

    <fragment
        android:id="@+id/fragmentA"
        android:name="com.cookpad.arcshowcase.stack.FragmentA"
        android:label="FragmentA" />

    <include app:graph="@navigation/fragment_b" />
</navigation>
Run Code Online (Sandbox Code Playgroud)

片段_b.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/fragment_b"
    app:startDestination="@id/fragmentB">
    <fragment
        android:id="@+id/fragmentB"
        android:name="com.cookpad.arcshowcase.stack.FragmentB"
        android:label="FragmentB" …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack android-architecture-navigation

10
推荐指数
1
解决办法
567
查看次数

使用Android Studio只为一个模块重建,同步Gradle和Clean

我在Android Studio中有一个由五个模块建立的复杂项目.其中四个充当独立应用程序,但其中一个是其余的基本代码.这样,我可以为每个应用程序提供一个大的共同核心和四个分隔代码(这些应用程序共享羞耻模型数据和api连接).

我的问题是,是否可以仅针对一个模块重建,清理或同步,而不是Android Studio中的整个项目.

谢谢!

android module compilation project android-studio

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

如何对 MutableSharedFlow&lt;T&gt;(replay=0) 发出值进行单元测试?

我无法弄清楚如何SharedFlow使用replay=0发出的值来测试a 。

import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.runBlocking
import org.junit.Test

class ShowcaseTest {

    @Test
    fun testIntSharedFlowFlow() {
        val intSharedFlow = MutableSharedFlow<Int>()

        runBlocking {
            intSharedFlow.emit(1)
        }
        
        // Does not work as there is no buffer because MutableSharedFlow(replay=0)
        assert(intSharedFlow.replayCache.first() == 1)
    }
}
Run Code Online (Sandbox Code Playgroud)

kotlin-coroutines

9
推荐指数
4
解决办法
1407
查看次数

可见范围项目/模块

我在Android Studio中链接了两个项目/模块.其中一个充当Api/Core,我需要某些类只能从这个模块访问,但可以从它的所有包中访问(因此在这种情况下"默认"是无用的).

但似乎在Java中它不是像内部(c#,swift)那样的修饰符."模块"修饰符是为Java 7提出的,但它没有实现.

那么,是否有任何方法可以保护模块的类与外界不同,而不会将其范围限制在当前的包中?

谢谢!

c# java android jvm scope

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