如何在UILabel上呈现print(" ", separator: "", terminator: "")的输出效果?
print()'s separator and terminator for UILabel Text Hey there! I get what you're trying to do—you're used to how print() lets you control spacing with separator and terminator, and you want that same flexibility when setting text for a UILabel. The good news is we can replicate this behavior easily by building a custom string-concatenation function, since print() itself just outputs to the console, not directly to UI elements.
Let's break this down step by step:
The Core Idea
Instead of trying to repurpose print()'s parameters directly, we'll create a function that mimics its logic: takes multiple values, joins them with your chosen separator, appends the terminator, and returns the final string—perfect for assigning to your UILabel's text property.
Solution 1: Mutable Parameter Function (Just Like print())
This version lets you pass arguments exactly how you would with print(), no arrays required:
func buildLabelText(_ items: Any..., separator: String = " ", terminator: String = "\n") -> String { // Convert all input items to strings let stringifiedItems = items.map { "\($0)" } // Join with separator, then add the terminator return stringifiedItems.joined(separator: separator) + terminator }
How to Use It with Your UILabel
Once you have this function, using it is straightforward. Here's a full example in a ViewController:
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Set up your UILabel (adjust frame/settings as needed) let myLabel = UILabel() myLabel.frame = CGRect(x: 20, y: 100, width: view.bounds.width - 40, height: 60) myLabel.textAlignment = .left myLabel.numberOfLines = 0 // Allow multiple lines if using \n terminator view.addSubview(myLabel) // Generate your text using the custom function let labelText = buildLabelText("Hello", "World", 2024, separator: "", terminator: "") // Assign to the label myLabel.text = labelText } func buildLabelText(_ items: Any..., separator: String = " ", terminator: String = "\n") -> String { let stringifiedItems = items.map { "\($0)" } return stringifiedItems.joined(separator: separator) + terminator } }
Why Your Previous Approach Didn't Work
When you tried creating separate functions for separator and terminator, you were missing the key step: print() combines all input values first using the separator, then appends the terminator. Our custom function wraps this entire workflow into one, so you get the exact output you want to display in the label.
Bonus: Array Input Version
If you prefer passing an array of values instead of separate arguments, here's an alternative function:
func buildLabelText(from items: [Any], separator: String = " ", terminator: String = "\n") -> String { let stringifiedItems = items.map { "\($0)" } return stringifiedItems.joined(separator: separator) + terminator } // Usage: let contentArray = ["Apple", "Banana", "Cherry"] let labelText = buildLabelText(from: contentArray, separator: "-", terminator: "!") myLabel.text = labelText // Outputs "Apple-Banana-Cherry!"
This should give you exactly the control you need, just like print() but for your UILabel. Let me know if you run into any edge cases or need further tweaks!
内容的提问来源于stack exchange,提问作者Islam Nurdin Uulu

