【问题标题】:keyword "it" is showing error in kotlin code关键字“it”在 kotlin 代码中显示错误
【发布时间】:2022-01-19 13:26:27
【问题描述】:

这段代码是在 oncreate 之前编写的,它工作正常,但是当我将它向下移动以创建一个函数时,这个“它”显示这些错误,我检查了没有像“它”这样的变量

这是代码

  if (manager.getInt("limitOfBox") > 0) {
        Bloom.with(this)
            .setParticleRadius(5f)
            .setEffector(
                BloomEffector.Builder()
                    .setDuration(1500)
                    .setAnchor(
                        (it.width / 2).toFloat(),
                        (it.height / 2).toFloat()
                    )
                    .build()
            )
            .boom(it)

这些是错误,“它”变成了红色

所以请告诉我要写什么而不是 "it" ,这样它就不会抛出错误。

这是运行良好的旧代码:-

class LuckyBoxActivity : AppCompatActivity() {

lateinit var binding: ActivityLuckyBoxBinding
lateinit var db: FirebaseFirestore
lateinit var myRepo: MyRepo
lateinit var manager: PrefManager
val activity = this

@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityLuckyBoxBinding.inflate(layoutInflater)
    setContentView(binding.root)
    showProgress()

    var winningCoins = 0
    var limit = 0

    db = FirebaseFirestore.getInstance()
    myRepo = MyRepo(this)
    manager = PrefManager(this)

    loadBanner()




    db.collection("Earning").document("box")
        .addSnapshotListener { value, error ->
            if (error == null) {
                val data = value?.toObject(WatchVideoModel::class.java)
                winningCoins = data?.winningCoins.toString().toInt()
                limit = data?.limit.toString().toInt()

                Log.e("luck Box", "onCreate: $winningCoins")
                Log.e("luck Box", "onCreate: $limit")

                if (manager.getInt("limitOfBox") == 102) {
                    binding.limit.text = "$limit"
                    manager.setInt("limitOfBox", limit)
                } else {
                    binding.limit.text = manager.getInt("limitOfBox").toString()
                }
                dismissProgress()
            }
        }



    binding.giftImg.setOnClickListener {



        val winningAmount = (0..winningCoins).random()

        if (manager.getInt("limitOfBox") > 0) {
            Bloom.with(this)
                .setParticleRadius(5f)
                .setEffector(
                    BloomEffector.Builder()
                        .setDuration(1500)
                        .setAnchor(
                            (it.width / 2).toFloat(),
                            (it.height / 2).toFloat()
                        )
                        .build()
                )
                .boom(it)

            Handler(Looper.getMainLooper()).postDelayed(Runnable {
                binding.giftImg.visibility = View.INVISIBLE
            }, 1000)
            Handler(Looper.getMainLooper()).postDelayed(Runnable {

                manager.setInt("limitOfBox", manager.getInt("limitOfBox") - 1)
                binding.limit.text = manager.getInt("limitOfBox").toString()

                binding.resultText.visibility = View.VISIBLE

                if (winningAmount == 0) {
                    binding.resultText.text =
                        "Oops !! better luck next time..."
                } else {
                    binding.resultText.text = "$winningAmount Coins"
                    myRepo.addCoins(winningAmount.toString().toDouble())
                }
            }, 1500)

        } else {
            showToast("Daily Limit Over")
        }
    }
}

fun loadBanner() {
    val view = BannerView(this@LuckyBoxActivity, constants.banner, UnityBannerSize(320, 50))
    view.load()
    binding.bannerAd.addView(view)
}
companion object {
    private const val TAG = "LuckyBoxActivity"
}

}

【问题讨论】:

  • 我也尝试使用“this”而不是“it”,但后来宽度和高度变成了红色
  • 我们需要查看更多原始代码的上下文,以了解 it 所指的内容。
  • 在这个例子中指的是binding.giftImg
  • 这是正确的..? if (manager.getInt("limitOfBox") > 0) { Bloom.with(this) .setParticleRadius(5f) .setEffector( BloomEffector.Builder() .setDuration(1500) .setAnchor( (binding.giftImg.width / 2) .toFloat(), (binding.giftImg.height / 2).toFloat() ) .build() ) .boom(binding.giftImg)
  • 是的,我想是的

标签: android android-studio kotlin


【解决方案1】:

it 这里代表你想要这个Bloom Effect 的视图。

参考库本身给出的例子。

 Bloom.with('activity')
 .setParticleRadius(5)
 .setEffector(new BloomEffector.Builder()
     .setDuration(800)
     .setAnchor(view.getWidth() / 2, view.getHeight() / 2)
     .build())
 .boom(view);

这里的视图是要在其中创建效果的项目。

【讨论】:

  • 所以先生而不是“它”我应该写什么..?哪个视图?,它是我的客户端代码,所以我不知道他创造这种效果的原因是什么?请问你能告诉写什么来代替它吗?
  • 我想您想在图像上创建这种效果。然后使用 imageView 对象。使用您要使用的视图对象
  • 我已经更新了旧代码,请问你现在可以告诉吗??
  • 这意味着旧代码中的 binding.giftImg
  • 非常感谢,我的问题解决了
【解决方案2】:

您将代码从其中移出的位置很可能是在作用域函数内。如果您不向我们展示 onCreate 中的代码,我们就无法告诉您 it 是什么。

一个非常常见的作用域函数是作用域函数let。例如,如果你这样做

val a = "test"
a.let {
    print(it)
}

那么it 指的是变量a。也许那里使用过类似的东西。

你可以阅读更多关于作用域函数here

【讨论】:

  • 我已经更新了旧代码,请问你现在可以告诉吗??
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 2017-11-20
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2012-03-17
相关资源
最近更新 更多