小编jon*_*ham的帖子

UILabel文本没有包装

我正在使用Storyboard开发一个Swift项目,我希望文本包含在标签中.在我没有使用故事板的旧Objective-C版本中,我使用了以下设置,并且工作完美.

没有故事板设置的Objective-C

以下是Swift的设置

Swift与故事板设置

我一直在阅读有关首选宽度设置的潜在自动布局问题.我目前将它们设置为自动布局,标签本身设置为宽度560.我添加了一个约束,使标签与尾随的超级视图保持20像素,虽然我认为这样可行但我仍然无法获取文本包裹.尺寸设置如下.

标签尺寸和约束

有人可以解释如何包装文本吗?

storyboard uilabel autolayout swift

31
推荐指数
2
解决办法
4万
查看次数

使用 Swift 包管理器添加其他库

我最近使用 Swift Package Manager 安装了 Firebase。安装它时,我被要求选择我想要包含的库。

在此输入图像描述

添加几个这样的库后不久,我想添加另一个。我能弄清楚如何添加新的唯一方法是删除完整的 Firebase 软件包并使用我需要的附加软件包重新安装它。有没有一种方法可以简单地添加另一个包,而无需先完全删除 Firebase 包?

swift-package-manager

25
推荐指数
1
解决办法
1736
查看次数

找不到包 sveltejs/adapter-auto svelte.config.js

我是 SvelteKit 的新手,并且已经根据 SvelteKit 文档构建了一个初始项目。当项目打开时,我在查看 index.svelte 时收到以下错误。

svelte.config.js 中的错误

错误 [ERR_MODULE_NOT_FOUND]:找不到从 /Users/.../svelte.config.js 导入的包“@sveltejs/adapter-auto”

package.json 文件

"devDependencies": {
        "@sveltejs/adapter-auto": "next",
        "@sveltejs/kit": "next",
        "prettier": "^2.5.1",
        "prettier-plugin-svelte": "^2.5.0",
        "svelte": "^3.44.0",
        "svelte-check": "^2.2.6",
        "typescript": "~4.6.2"
    },
Run Code Online (Sandbox Code Playgroud)

svelte.config.js 文件

import adapter from '@sveltejs/adapter-auto';

/** @type {import('@sveltejs/kit').Config} */
const config = {
    kit: {
        adapter: adapter()
    }
};

export default config;
Run Code Online (Sandbox Code Playgroud)

当项目构建时,它到处都会抛出错误。任何帮助,将不胜感激。

sveltekit

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

通用结构“ObservedObject”要求符合“ObservableObject”

我无法理解为什么下面的代码无法编译。我收到一条错误消息,指出我必须遵守 ObservableObject,但我不明白为什么不这样做。

我已经简化以表明我正在看到。我有两节课。第二个观察第一个,然后视图观察第二个。

头等舱

import Foundation
import SwiftUI
import CoreBluetooth

class BLEPeripheralDevice: NSObject, ObservableObject {
    @Published var bodySesnorLocation: String = ""
}
Run Code Online (Sandbox Code Playgroud)

二等舱

import Foundation
import SwiftUI
import CoreBluetooth

class BLEManager: NSObject, ObservableObject {
    @ObservedObject var blePeripheralDevice: BLEPeripheralDevice!
    
    @Published var blePeripheralName: String = ""
}
Run Code Online (Sandbox Code Playgroud)

看法

import SwiftUI

struct BluetoothDeviceView: View {
    @ObservedObject var bleManager = BLEManager()

var body: some View {
        VStack (spacing: 10) {
            Text("Bluetooth Devices")
}
}
Run Code Online (Sandbox Code Playgroud)

当我编译此代码时,我在以下行的第二类中收到错误。

@ObservedObject var blePeripheralDevice: BLEPeripheralDevice!
Run Code Online (Sandbox Code Playgroud)

通用结构“ObservedObject”需要“BLEPeripheralDevice?” 符合“ObservableObject”

我不明白为什么会这样。任何帮助表示赞赏。

swiftui

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

SwiftUI 列表重复 ID 值

我正在开发一个 SwiftUI 项目,该项目使用合并从 Firebase Firestore 中提取数据。每个用户都可以在应用程序中创建“优惠”。为了在他们的帐户页面上列出他们的报价,我使用 onAppear 将 currentUserUid 传递到我的视图模型,以便我可以使用 currentUserUid 过滤数据库结果。OfferHistoryView 如下。当视图第一次出现时,这非常有效。我的问题是当我从 OfferDetailView 返回时,我收到以下消息。

ForEach<Array, String, NavigationLink<OfferRowView, ModifiedContent<OfferDetailView, _EnvironmentKeyWritingModifier<Optional>>>>:ID 在集合中出现多次,这将给出未定义的结果!

虽然这不会使应用程序崩溃,但并不理想。我尝试过,每次加载视图时以及每次调用组合时都从集合中删除所有项目,但这并不能解决问题。我还添加了打印语句来尝试捕获重复项,但我从未看到重复项。您可以在下面看到我的打印语句和其余相应文件。任何帮助,将不胜感激。

OfferViewHistory - 消息的来源。

struct OfferHistoryView: View {
    let db = Firestore.firestore()
    
    @EnvironmentObject var authSession: AuthSession
    @EnvironmentObject var offerHistoryViewModel: OfferHistoryViewModel
    
    var body: some View {
        
        return VStack {
            List {
                ForEach(self.offerHistoryViewModel.offerRowViewModels, id: \.id) { offerRowViewModel in
                    NavigationLink(destination: OfferDetailView(offerDetailViewModel: OfferDetailViewModel(offer: offerRowViewModel.offer, listing: offerRowViewModel.listing ?? testListing1))
                                    .environmentObject(authSession)
                    ) {
                        OfferRowView(offerRowViewModel: offerRowViewModel)
                    }
                } // ForEach
            } // List
            .navigationBarTitle("Offer History")
        } …
Run Code Online (Sandbox Code Playgroud)

google-cloud-firestore swiftui combine swiftui-list

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

TableView单元格分隔线不跨整个单元格延伸

我正在开发一个新项目,并且为UI使用了故事板。我所有的tableViews的行分隔符都有问题。下图显示了两行。第一个是在属性检查器中设置的蓝色。第二个是黑色,并添加了我放置在单元格中的imageView。该线确实延伸到单元的右侧,但没有延伸到左侧。有任何想法吗?

蓝色分隔线并不一直延伸到单元格的左侧。

interface-builder swift xcode6

5
推荐指数
1
解决办法
3489
查看次数

属性和分配内存

我正在通过Swift攻击我的方式.我喜欢它,但我发现自己认为一些事情可能过于简单,我怀疑它是否正确.

我正在从Objective-C转换项目.在项目中,我有一个在方法中使用的字符串属性.在Objective-C中,我做了以下操作来初始化和分配对象.一旦初始化并分配,我将其设置为空字符串.

NSMutableString *tempString = [[NSMutableString alloc] init];
self.currentParsedCharacterData = tempString;
[currentParsedCharacterData setString: @""];
Run Code Online (Sandbox Code Playgroud)

在Swift我键入以下内容.这真的很容易还是我错过了什么?

self.currentParsedCharacterData = ""
Run Code Online (Sandbox Code Playgroud)

我发现自己想要做以下事情,但我不确定是否有必要.

var tempString : String = ""
self.currentParsedCharacterData = tempString
Run Code Online (Sandbox Code Playgroud)

照顾自己,

乔恩

memory-management swift

5
推荐指数
1
解决办法
512
查看次数

具有Segues到多个视图的Storyboard TableView

我在设计故事板时遇到了问题.我目前在应用程序商店中有一个使用XIB文件设计的应用程序.我有一个放在UIViewController上的tableView - 而不是tableViewController - 为所选的每一行加载一个唯一的viewController.

我试图将这个概念转换为故事板.我做了以下事情

  1. 在故事板中放置一个UIViewController.

  2. 在UIViewController上放置一个UITableView,这样我就可以自定义表视图.

  3. 我尝试从UITableViewCell连接到多个ViewControllers,我不被允许.

  4. 我尝试从UIViewController创建多个segue - 我可以 - 但是当我点击单元格时,不会触发segue.我尝试使用didSelectRowAtIndexPath:和prepareForSegue:

由于这不起作用,我尝试使用UITableViewController创建一个项目,然后从UITableViewController创建多个segue.然后我命名每个segue并使用didSelectRowAtIndexPath:方法来测试所选单元格并调用performSegueWithIdentifier:这不起作用.当我点击单元格时,我会随机加载不正确的viewController.我复制了一些我的代码,下面几张屏幕截图.

我想知道我是否公然遗漏了一些明显的东西,还是我必须恢复到这种类型的项目的xib格式?

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)
{
    if indexPath.row == 0
    {
        println("Segue1")
        self.performSegueWithIdentifier("Segue1", sender: self)
    }
    else if indexPath.row == 1
    {
        println("Segue2")
        self.performSegueWithIdentifier("Segue2", sender: self)
    }
    else if indexPath.row == 2
    {
        println("Segue3")
        self.performSegueWithIdentifier("Segue3", sender: self)
    }

}
Run Code Online (Sandbox Code Playgroud)

故事板与命名Segues

照顾自己,

乔恩

storyboard segue swift

4
推荐指数
1
解决办法
9628
查看次数

Swift:从未使用过NSTimer的初始化,考虑用_替换

我最近下载了Xcode 7和Swift 2.0.在Swift 1.2中,我使用以下代码设置了一个计时器.

let timer = NSTimer.scheduledTimerWithTimeInterval(8.0, target: self, selector: Selector("didTimeout"), userInfo: nil, repeats: false)
Run Code Online (Sandbox Code Playgroud)

我只是安排一个计时器,我不会在任何地方使用定时器.

我的理解是,为了做到这一点,我不得不使用"let timer ="部分.

使用Swift 2.0,我收到以下警告.

永远不会使用不可变值'timer'的初始化; 考虑将赋值替换为'_'或删除它.

我之前从未见过使用_所以我只是用下面的行代替上面的行.

NSTimer.scheduledTimerWithTimeInterval(8.0, target: self, selector: Selector("didTimeout"), userInfo: nil, repeats: false)
Run Code Online (Sandbox Code Playgroud)

没有使用"让计时器"或"var计时器"在Swift中一直没问题,或者这是Swift 2.0中的新功能?

swift

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

将带有参数的闭包传递给 SwiftUI 视图

我正在开发一个 SwiftUI 项目。我创建了一个自定义按钮,可以向其传递函数。这看起来如下所示。

自定义按钮

struct CustomButton: View {
    let buttonTitle: String
    var function: () -> Void
    
    var body: some View {
        Button(action: {
            self.function()
        }, label: {
            Text(self.buttonTitle)
        }) // Button - Login
    } // View
}
Run Code Online (Sandbox Code Playgroud)

在使用它的视图中,我可以执行以下操作。

struct NewView: View {
    var body: some View {
        CustomButton(buttonTitle: "Custom Button", function: myFunc)
    }
}

func myFunc() {
    print("My Custom Button Tapped")
}
Run Code Online (Sandbox Code Playgroud)

这确实有效。

我现在想做的是将参数传递给函数。我在这方面遇到了麻烦。我尝试了以下方法。

struct CustomButton: View {
    let buttonTitle: String
    var function: (String) -> Void
    
    var body: some View …
Run Code Online (Sandbox Code Playgroud)

swift

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